fork()在此代码中调用的次数?

时间:2014-06-17 11:09:27

标签: c fork

这是我从我学院去年的试卷中得到的代码。

   #include<stdio.h>
   #include<unistd.h>
    int main() 
    {
       fork();
       fork() && fork() || fork();
       fork();
       printf("forked ");
       return 0;
    }

我有20次打印“分叉”作为输出。有人可以解释为什么会这样吗?

1 个答案:

答案 0 :(得分:1)

是的,在正常情况下(系统资源不低),您将获得20 forked个打印输出。为什么呢?

第一个分支是无条件的,所以无论接下来发生什么,我们都会得到两次。与第三组相同,所以无论从第二组叉子得到什么,我们总共得到四次,如果我们为了清楚起见添加括号,则为:

(fork() && fork()) || fork();

这里有多少人?好吧,fork将返回零(false)到一个进程而非零到另一个进程。所以:

        -> true
 true -/-> false -\-> true
                   -> false

 false ------------\-> true
                    -> false

在每一行中,一个进程在通过调用时进行。你可以看到有五行,所以有五个流程。乘以我们上面确定的四个,你得到20。