gpt4 book ai didi

c - 这里 fork 了多少个进程

转载 作者:行者123 更新时间:2023-11-30 19:54:49 25 4
gpt4 key购买 nike

我知道这可能是一个愚蠢的问题,但任何人都可以帮助我理解以下代码片段的行为

//label 0
int main(){
fork();//label 1
fork();//label 2
fork();//label 3
return 0;
}

据我了解,流程树是这样的

              [0]
/ | \
[1] [2] [3]
/ \ |
[2] [3] [3]
|
[3]

我说得对吗?在这种情况下,我很困惑为什么第二个 fork 不产生与标签 1 fork 相对应的进程,而第三个 fork 不进一步产生任何进程。我的意思是子进程是父进程的精确副本(至少在代码中),因此它必须完整执行其父进程的代码。谁能帮我解决这个困惑......

最佳答案

是的,子级是其父级的副本。它也继承执行状态,包括父级正在执行的代码中的位置。当父级从第一个 fork() 返回时,子级的 PID (>0) 会返回,其第一个子级将返回 0,然后继续执行第二个和第三个 fork。子进程不会返回到 main() 的顶部,它只是从创建它的 fork 之后继续。

编辑重新措辞以回应评论。请参阅fork(2) man page了解所有返回值的含义。

关于c - 这里 fork 了多少个进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13730554/

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