难以理解分叉逻辑
Trouble Understanding Fork Logic
有人可以帮助我了解这段代码中发生了什么吗?我无法理解为什么输出是这样的。输出为:
0 1 2 3 4
3
2
1
0
int main() {
int i;
for (i = 0; i < 5 && !fork(); i++) {
fflush(stdout);
printf("%d ", i);
}
wait(NULL);
printf("\n");
return 0;
}
这里有两件事:
首先,fork()
return 0
在子进程中,而它 return 是父进程的非零 pid。
二、&&
短路。
因此在第一个进程 (p0) 的开头,它运行到 i < 5 && !fork()
。现在 i = 0
并创建了另一个进程 (p1)。现在对于 p0,test !fork()
失败,它结束 for 循环并等待 child 结束。对于 p1,测试成功,并打印出 0
,然后将 i
递增到 1,然后它将创建进程 p2 并像 p0 一样退出 for 循环。
因为短路,当i
等于5时,不会再调用fork
。
有人可以帮助我了解这段代码中发生了什么吗?我无法理解为什么输出是这样的。输出为:
0 1 2 3 4
3
2
1
0
int main() {
int i;
for (i = 0; i < 5 && !fork(); i++) {
fflush(stdout);
printf("%d ", i);
}
wait(NULL);
printf("\n");
return 0;
}
这里有两件事:
首先,fork()
return 0
在子进程中,而它 return 是父进程的非零 pid。
二、&&
短路。
因此在第一个进程 (p0) 的开头,它运行到 i < 5 && !fork()
。现在 i = 0
并创建了另一个进程 (p1)。现在对于 p0,test !fork()
失败,它结束 for 循环并等待 child 结束。对于 p1,测试成功,并打印出 0
,然后将 i
递增到 1,然后它将创建进程 p2 并像 p0 一样退出 for 循环。
因为短路,当i
等于5时,不会再调用fork
。