#include <stdio.h>
#include <unistd.h>
int main()
{
fork();
fork() && fork() || fork();
fork();
printf("forked\n");
return 0;
}
如何计算执行程序后产生的进程数,这导致难以理解? 帮我查一下。
平台--UBUNTU 10.04
最佳答案
让我们跟随 fork 树,假设没有 fork 失败
fork();
现在我们有两个进程,到目前为止,谁是 child 谁是 parent 并不重要,称它们为 p1 和 p2
fork()
这两个进程都产生了另一个子进程,所以我们有 4 个进程,其中两个(p3、p4)的结果为零,另外两个(p1 和 p2)的结果为非零
&& fork()
p1 和 p2 再次 fork,给 p5 和 p6,总共六个进程。在 p1 和 p2 中,&&
的计算结果为 true,因此它们不会在此行中再次 fork 。对于 p3、p4、p5、p6,&&
的计算结果为 false,因此它们 fork
|| fork();
在这里,产生了四个新进程,总共有 6 + 4 = 10。
fork();
10 个进程中的每一个再次 fork,产生 20 个。
关于c - c中的fork()系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8726965/