为什么该程序打印“分叉!” 4次?

#include <stdio.h>
#include <unistd.h>

int main(void) {

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

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

最佳答案

第一个fork()在调用过程(称为p0)中返回非零值,在子进程(称为p1)中返回0。

在p1中,发生&&短路,该过程调用printf并终止。在p0中,过程必须评估表达式的其余部分。然后,它再次调用fork(),从而创建一个新的子进程(p2)。

在p0中,fork()返回一个非零值,并且发生||短路,因此该过程调用printf并终止。

在p2中,fork()返回0,所以||的其余部分。必须求值,即最后一个fork();导致为p2创建一个孩子(称为p3)。

然后,P2执行printf并终止。

然后P3执行printf并终止。

然后执行4个printf

关于c - 为什么该程序打印“ fork !” 4次?,我们在Stack Overflow上找到一个类似的问题:https://stackoverflow.com/questions/32541689/

10-16 19:32