我试图理解之前给我的一行代码的执行顺序以及使用 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/