{
if(fork() && fork())
{
fork();
}
if(fork() || fork())
{
fork();
}
printf("hello");
return 0;
}
我不知道fork()
在这里的行为以及打印你好的次数。
我只知道fork() && fork()
将为1个父级生成总共3个进程,同样,fork() || fork()
将为1个父级生成3个进程。
在第一个if
条件之后,创建了3个进程,只有父进程才会进入if块。现在共有4个流程。现在,如何进一步,我完全搞砸了?
如果可能,请显示树形图。
答案 0 :(得分:3)
对于第一块:
if(fork() && fork())
{
fork();
}
子进程收到0并跳过if,父进程继续计算条件。父执行下一个fork并再次进入if块。所以我们有3个fork调用,导致4个进程。
然后,这4个进程中的每一个都执行下一个块。让我们看一下:
if(fork() || fork())
{
fork();
}
我们分叉一次。孩子收到非0并且条件结果已经为真,所以它进入if而不评估条件的第二部分并在那里分叉。所以我们已经有2个fork调用。父进程必须在表达式中计算第二个fork,并且它的子进程再次输入if和forks。所以还有2个fork调用。总计4次调用导致5个正在运行的进程。
因此,从第一个块中的4个进程中的每一个进入第二个块中的5个进程,导致总共4 * 5 = 20个进程。每一个都打印出来"你好"。
答案 1 :(得分:2)