繁体   English   中英

fork()输出

[英]A fork() output

我有以下代码:

int main(){
  if (fork() + fork())
     printf("Boom!\n");
  return 0;
}

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

有人可以解释一下吗?

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

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

           Parent
  fork1            fork3
       fork2

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

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

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

进行以下测试:

int main() {
    pidsum = fork() + fork();
    printf("%d", pidsum);
}

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM