这是我从我学院去年的试卷中得到的代码。
#include<stdio.h>
#include<unistd.h>
int main()
{
fork();
fork() && fork() || fork();
fork();
printf("forked ");
return 0;
}
我有20次打印“分叉”作为输出。有人可以解释为什么会这样吗?
答案 0 :(得分:1)
是的,在正常情况下(系统资源不低),您将获得20 forked
个打印输出。为什么呢?
第一个分支是无条件的,所以无论接下来发生什么,我们都会得到两次。与第三组相同,所以无论从第二组叉子得到什么,我们总共得到四次,如果我们为了清楚起见添加括号,则为:
(fork() && fork()) || fork();
这里有多少人?好吧,fork将返回零(false)到一个进程而非零到另一个进程。所以:
-> true
true -/-> false -\-> true
-> false
false ------------\-> true
-> false
在每一行中,一个进程在通过调用时进行。你可以看到有五行,所以有五个流程。乘以我们上面确定的四个,你得到20。