fork()输出

Mic*_*key 3 c fork

我有以下代码:

int main(){
  if (fork() + fork())
     printf("Boom!\n");
  return 0;
}
Run Code Online (Sandbox Code Playgroud)

我不明白为什么这段代码打印消息3次.

有人可以解释一下吗?

use*_*127 5

对于父进程,Fork返回非零,对子进程返回零.

所以父进程分叉,创建一个子进程(fork1).这个子进程将再次fork(它将执行第二个fork)(fork2).创建第二个子进程.然后父进程将分叉第二个fork调用,创建第三个进程(fork3).所以我们将得到这样的树结构:

           Parent
  fork1            fork3
       fork2
Run Code Online (Sandbox Code Playgroud)

现在请注意,对于子进程,在fork之前执行的所有调用的值都是从父进程继承的.如果我们使用这个,我们得到:

  • Parent将具有非零返回值,因为两个fork()调用都返回非零值
  • fork1 将具有非零返回值,因为最后一个fork返回非零值
  • fork2将具有零返回值,因为第一个fork为零(这是继承自的fork1),第二个fork也将返回零(fork2在第二个fork中创建).
  • fork3将具有非零返回值,因为它从中继承了第一个fork值Parent.

fork() + fork()非零时,将执行if.因此3次繁荣!