无法理解Fork逻辑

时间:2015-05-14 03:41:50

标签: process fork system-calls

有人可以帮我理解这部分代码中发生了什么吗?我无法理解为什么输出是这样的。输出是:

  

0 1 2 3 4

     

3

     

2

     

1

     

0

int main() {
   int i;

   for (i = 0; i < 5 && !fork(); i++) {
      fflush(stdout);
      printf("%d ", i);
   }
   wait(NULL);

   printf("\n");
   return 0;
}

1 个答案:

答案 0 :(得分:2)

这里有两件事:

首先,fork()在子进程中返回0,同时向父进程返回非零pid。

第二,&&的短路。

所以在第一个进程(p0)的开头,它运行到i < 5 && !fork()。现在i = 0和另一个进程创建(p1)。现在对于p0,测试!fork()失败,它结束for循环并等待子节点结束。对于p1,测试成功,打印出0,然后将i增加到1,然后它将创建进程p2,并且它本身会像p0那样离开for循环。

由于短路,当i等于5时,将不再调用fork