2014-03-28 91 views

回答

1
#include <stdio.h> 
int main() 
{ 
    fork(); /* A */ 
    (fork() /* B */ && 
    fork() /* C */) || /* B and C are grouped according to precedence */ 
    fork(); /* D */ 
    fork(); /* E */ 

    printf("forked\n"); 
    return 0; 
} 
  • 有5个叉呼叫(A,B,C,d,E)。
  • 程序以主线程(m)开始。
  • 当执行fork时,将创建一个新的子进程。 (c)中

所以根据所示的图中,每个节点将ALWAYS有2级儿童的节点。

  • 的左节点总是创建进程(米)
  • 右节点是子进程。

“如果成功,子进程的PID返回父,并在孩子则返回0。”

让我们看一下叉B. 父进程(米)将返回一个非negetive PID和子进程(C1)返回0

  • 因此,父进程执行叉ç,但跳过fork D归因于short circuit evaluation

    (1234 && 4392) || fork()

  • 新创建的子过程跳过叉Ç并执行叉 d出于上述原因。

    (0 && fork()) || fork()

enter image description here