2017-04-18 67 views
-4

我有這個代碼有兩個孩子和他的父親,但有一個問題,因爲所有的孩子(和父親執行主代碼)。爲什麼所有的孩子都執行主代碼?

代碼:

int main() { 
    switch (fork()) { 
    case 0:  //child1 
    break; 
    default: 
    switch (fork()) { 
    case 0: //child2 
     break; 
    default: //father 
     break; 
    } 
    } 
    printf("hi\n"); 
} 

輸出:

hi 
hi 
hi 
+3

看起來對我來說是正確的行爲。 – aragaer

+0

因爲這就是它的原理! –

+1

我不確定你爲什麼期望有什麼不同......你對「fork」是如何工作感到困惑嗎?你對「break」是如何工作感到困惑嗎?你對_control flow_的工作原理感到困惑嗎? – Siguza

回答

1

當您使用fork()它創建的父進程的幾乎確切的重複,除了從fork()調用的返回值。它們都繼續並執行所有相同的代碼,除了依賴於返回值的任何內容。

由於printf()的調用不是有條件的,因此它將在父進程和子進程中執行。如果您只希望它在特定過程中執行,則應將其放入switch()聲明的該分支中。

相關問題