为什么使用clone()而不是fork()?

3

我正在进行管道和进程间通信方面的工作。 我有这份strace输出,但不确定为什么使用clone而不是fork。这是否意味着它们是相同的?

Strace输出:

enter codexecve("./forks", ["./forks"], [/* 55 vars */]) = 0
arch_prctl(ARCH_SET_FS, 0x7f2b0e498700) = 0
pipe([3, 4])                            = 0
clone(Process 7304 attached
child_stack=0, flags=CLONE_CHILD_CLEARTID|CLONE_CHILD_SETTID|SIGCHLD, child_tidptr=0x7f2b0e4989d0) = 7304
[pid  7303] execve("/usr/bin/wc", ["wc", "-l"], [/* 55 vars */] <unfinished ...>
[pid  7304] execve("/bin/ls", ["ls"], [/* 55 vars */] <unfinished ...>
[pid  7303] <... execve resumed> )      = 0
[pid  7304] <... execve resumed> )      = 0
[pid  7303] arch_prctl(ARCH_SET_FS, 0x7f558acde700) = 0
[pid  7304] arch_prctl(ARCH_SET_FS, 0x7f4bef4f67c0) = 0
[pid  7304] exit_group(0)               = ?
Process 7304 detached
--- SIGCHLD (Child exited) @ 0 (0) ---
21
exit_group(0) 
1个回答

5
不,fork()和clone()不是一样的。但是,你可以将它们想象成作为 clone()系统调用的包装函数,这意味着它们在内部使用相同的 clone()系统调用来创建新进程。这就解释了你在 strace 输出中观察到的情况。
请查看问题;它们比我更好地解释了两者的区别。

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接