2017-04-18 2 views
-4

私はこのコードを2人の子供とその父親と一緒に持っていますが、すべての子供たち(そして父親がメインのコードを実行するため)に問題があります。なぜすべての子がメインコードを実行するのですか?

コード:

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

なぜあなたは何か違うことを期待しているのか分かりません。フォークの仕組みについて混乱していますか?あなたは '休憩 'の仕組みについて混乱していますか? _control_ flow_の仕組みについて混乱していますか? – Siguza

答えて

1

あなたがfork()を使用する場合、それはfork()呼び出しからの戻り値を除いて、親プロセスのほとんど-正確な複製を作成します。それらは、その戻り値に依存するものを除いて、同じコードをすべて実行し続けます。

printf()の呼び出しは条件付きではないため、父と子のプロセスの両方で実行されます。特定のプロセスでのみ実行したい場合は、switch()ステートメントのその枝に入れてください。

関連する問題