【问题标题】:Why is clone() used and not fork()?为什么使用 clone() 而不是 fork()?
【发布时间】:2015-05-06 21:56:13
【问题描述】:

我正在做一些管道和叉子的工作。 我有这个 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) 

【问题讨论】:

    标签: linux unix fork system-calls strace


    【解决方案1】:

    不,fork()clone() 不一样。但是,您可以将它们都想象成用作clone() 系统调用的包装器的函数,这意味着它们在内部使用相同的clone() 系统调用来创建新进程。这解释了您在 strace 的输出中观察到的情况。

    检查thisthis问题;他们比我能更好地解释这些差异。

    【讨论】:

      猜你喜欢
      • 2022-08-10
      • 2012-09-30
      • 2018-12-28
      • 2018-06-10
      • 1970-01-01
      • 2012-07-24
      • 2015-12-20
      • 2019-09-21
      • 2011-11-03
      相关资源
      最近更新 更多