我有这个代码示例,但我不明白为什么这段代码会创建 5 个进程加上原来的进程。 (共 6 个过程)
#include <unistd.h>
int main(void) {
int i;
for (i = 0; i < 3; i++) {
if (fork() && (i == 1)) {
break;
}
}
}
最佳答案
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/