c - 了解 UNIX 中的 fork 系统调用

标签 c linux unix process fork

我试图理解之前给我的一行代码的执行顺序以及使用 fork() 系统调用的进程创建。它是在 UNIX 上运行的 C 语言。

我了解 fork() 背后的主要概念,但是,我想了解从以下代码行派生的进程树创建:

x = fork() || !fork();

任何帮助将不胜感激!

最佳答案

运行代码的初始父进程(假设它是 PID = 1000),执行 x = fork() 部分,并生成一个新的子进程-process(假设PID = 1001)。

对于进程PID = 1000,到目前为止逻辑表达式的值不为零,因为fork(2)返回其子级的 pid。因此,由于short circuit evaluation ,逻辑表达式的其余部分不会被计算,因为它不需要。

对于进程PID = 1001,到目前为止逻辑表达式的值为0,因为在创建新进程的情况下,fork(2)返回0;所以它也必须评估逻辑表达式的其余部分。它执行 !fork() 部分,生成一个新进程(假设 PID = 1002)。

派生的进程树如下:

       1000
        |
        |
       1001
        |
        |
       1002

关于c - 了解 UNIX 中的 fork 系统调用,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25477466/

相关文章:

c++ - 压缩嵌套循环

c - 我如何使用嵌入式 c 向 Telit 调制解调器发出命令?

c - 指向指针的通用指针

linux - 如何使用版本 5 创建 ubifs?

linux - 原始套接字与 TUN 设备

文件描述符可以在不相关的进程之间共享吗?

c - 如何检查输入结束? C、找到42

linux - shell标题是什么意思?

PHP 无法打开流 : Too many open files

linux - 如何从 bz2 存档中获取文件列表(ls 命令)?