2014-03-28 122 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