gpt4 book ai didi

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

转载 作者:塔克拉玛干 更新时间:2023-11-03 00:53:27 25 4
gpt4 key购买 nike

我正在做一些关于管道和 fork 的工作。我有这个 strace 输出,但是我不确定为什么使用 clone 而不是 fork。这是否意味着它们相同?

跟踪输出

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)

最佳答案

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

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

关于linux - 为什么使用 clone() 而不是 fork()?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28879405/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com