C 理解UNIX中的fork系统调用

C 理解UNIX中的fork系统调用,c,linux,unix,process,fork,C,Linux,Unix,Process,Fork,我试图理解前面给我的一行代码的执行顺序,以及使用fork()系统调用创建进程。它是在UNIX上运行的C语言 我理解fork()背后的主要概念,但是,我想了解从以下代码行派生的流程树创建: x = fork() || !fork(); 任何帮助都将不胜感激 运行代码的初始父进程(假设它是PID=1000),执行x=fork()部分,并生成一个新的子进程(假设PID=1001) 对于进程PID=1000,到目前为止,逻辑表达式的值不是零,因为它返回其子进程的PID。因此,由于,逻辑表达式的其余部分

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

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

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

任何帮助都将不胜感激

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

对于进程
PID=1000
,到目前为止,逻辑表达式的值不是零,因为它返回其子进程的
PID
。因此,由于,逻辑表达式的其余部分不需要计算

对于进程
PID=1001
,到目前为止逻辑表达式的值是
0
,因为在创建新进程的情况下,返回
0
;因此,它还必须计算逻辑表达式的其余部分。它执行
!fork()
part,生成一个新进程(比如说
PID=1002

派生的流程树如下所示:

       1000
        |
        |
       1001
        |
        |
       1002
很好,另外,
fork()
返回2次,一次是父进程中子进程的pid,另一次是子进程返回0。两个进程在
fork()
返回后继续处理。

您知道
fork()
返回什么吗?你知道短路评估吗?把这些加在一起,你会得到3个过程。。。