c - 这些 fork() 语句的进程树是什么样子的?

标签 c linux fork

谁能告诉我这段c代码会生成什么进程树?

#include <unistd.h>

int main(void)
{
   fork() || (fork() && fork());
   return 0;
}

最佳答案

这可能是一份家庭作业。不过,这很有趣。

首先:

  • fork() 为子进程返回 0。

  • fork() 为父级返回一个不等于 0 的值。

因此,在服务器中,逻辑或 (||) 的第一部分不等于 0,并且表达式的其余部分不会在父级上执行:一次调用 fork。

在子进程中,第一部分是 0,因此执行其余的 fork() && fork() 。因此,在这个 child 上,第一个 fork() 返回一个不等于零的值,导致评估第二部分。因此,有两个新 child 。它们的返回值都是 0,从而短路了计算。

未经测试,在 Safari 中输入。

关于c - 这些 fork() 语句的进程树是什么样子的?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/41513702/

相关文章:

c - libiptc : adding DNAT rule with destination IP

linux - 在 Linux 机器上的大量磁盘 I/O 期间文件写入停滞

Python多处理卡住叉炸弹

c - 使用 fork() 的单词频率

c - 如何在 gcc make 中链接静态库?

c - 如何用 C 编写一个显示网页的程序?

C: 如何为输出创建可变数量的 FILE 流?

c++ - 为什么我将两个短整数相乘得到一个负数?

检查输入是否是有效的 shell 命令,Linux

r - 无法在 Ubuntu 20.04 上的 Rstudio 中加载已安装的软件包 : sh: 1: make: not found