【发布时间】:2016-09-07 00:20:37
【问题描述】:
在 eglibc 的 nptl/sysdeps/unix/sysv/linux/i386/fork.c 中有一个定义:
#define ARCH_FORK() \
INLINE_SYSCALL (clone, 5, \
CLONE_CHILD_SETTID | CLONE_CHILD_CLEARTID | SIGCHLD, 0, \
NULL, NULL, &THREAD_SELF->tid)
在实际中使用__libc_fork() 作为实现的核心。但是例如在 Linux 的 arch/x86/entry/syscalls/syscall_32.tbl 中存在一个 sys_fork 条目,在 syscalls_64.tbl 中也是如此。因此,显然 Linux 确实有针对 fork 的特殊系统调用。
所以我现在想知道:如果内核已经提供了 fork 系统调用,为什么 glibc 会根据 clone 实现 fork()?
【问题讨论】: