了解UNIX中的fork系统调用

时间:2014-08-25 00:05:54

标签: c linux unix process fork

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

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

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

任何帮助将不胜感激!

2 个答案:

答案 0 :(得分:4)

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

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

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

派生的过程树如下:

       1000
        |
        |
       1001
        |
        |
       1002

答案 1 :(得分:1)

chrk's answer很棒,另外,fork()返回2次,一次是父进程中子进程的pid,另一种是从子进程返回的0。在fork()返回后,这两个进程都会继续处理。