这些fork()语句的进程树如何?

时间:2017-01-06 20:19:12

标签: c linux fork

任何人都可以告诉我这个c代码将生成哪个进程树?

#include <unistd.h>

int main(void)
{
   fork() || (fork() && fork());
   return 0;
}

1 个答案:

答案 0 :(得分:1)

可能这是一个功课。然而,这很有意思。

首先:

  • fork()为孩子返回0。

  • fork()为父级返回不等于0的值。

因此,在服务器中,逻辑或(||)不等式0的第一部分和表达式的其余部分不在父项上执行:一次调用fork。

在孩子中,第一部分为0,因此执行其余的fork() && fork()。所以在这个孩子上,第一个fork()返回一个不等于零的值,导致评估第二部分。因此有两个新的孩子。它们都返回0,使评估短路。

未经测试,在Safari中输入。