gpt4 book ai didi

c - 我不明白 fork() 的这个例子

转载 作者:太空狗 更新时间:2023-10-29 16:34:28 25 4
gpt4 key购买 nike

我有这个代码示例,但我不明白为什么这段代码会创建 5 个进程加上原来的进程。 (共 6 个过程)

#include <unistd.h>

int main(void) {
int i;
for (i = 0; i < 3; i++) {
if (fork() && (i == 1)) {
break;
}
}
}

Process graph

最佳答案

fork() 将进程一分为二,并返回 0(如果此进程是子进程)或子进程的 PID(如果此进程是父进程)。所以,这一行:

if (fork() && (i == 1)) break;

说“如果这是父进程,并且这是第二次通过循环,则跳出循环”。这意味着循环是这样运行的:

  • i == 0 : 第一次通过循环,i为 0,我们创建两个进程,都在 i == 1 处进入循环. 现在共有两个进程

  • i == 1 : 这两个进程都会 fork ,但由于 if (fork() && (i == 1)) break;,其中两个不会继续迭代行(不继续的两个都是 fork 调用中的 parent )。 现在总共有四个进程,但其中只有两个继续循环。

  • i == 2 : 现在,继续循环的两个都 fork,导致 6 个进程。

  • i == 3 : 所有 6 个进程退出循环(因为 i < 3 == false ,没有更多的循环)

关于c - 我不明白 fork() 的这个例子,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/9253353/

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