我有这个代码示例,但我不明白为什么这段代码会创建 5 个进程加上原来的进程。 (总共6个过程)
#include <unistd.h>
int main(void) {
int i;
for (i = 0; i < 3; i++) {
if (fork() && (i == 1)) {
break;
}
}
}
fork() http://linux.die.net/man/2/fork将进程一分为二,并返回 0(如果此进程是子进程)或子进程的 PID(如果此进程是父进程)。所以,这一行:
if (fork() && (i == 1)) break;
表示“如果这是父进程,并且这是第二次循环,则跳出循环”。这意味着循环像这样运行:
i == 0
:第一次循环时,i
为0,我们创建两个进程,都进入循环i == 1
. 现在总共有两个进程
i == 1
:这两个进程都分叉了,但是其中两个没有继续迭代,因为if (fork() && (i == 1)) break;
行(不继续的两个都是 fork 调用中的父母)。现在总共四个过程,但其中只有两个继续循环。
i == 2
:现在,继续循环的两个都分叉了,结果有6个过程。
i == 3
:所有 6 个进程退出循环(因为i < 3 == false
,不再循环)
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)