一尘不染

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

linux

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

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

int main(void) {

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

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

阅读 241

收藏
2020-06-02

共1个答案

一尘不染

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

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

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

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

然后printf,P2执行并终止。

然后printf,P3执行并终止。

printf然后执行4 s。

2020-06-02