2017-03-06 9 views
0

fork()システムコールでは、アドレス空間の2つの同一のコピーが作成されます.1つは親用、もう1つは子用です。fork()で子プロセスの作成を検出する

if文でforkを使用する場合、次のコードで子プロセスを何回作成するのですか?

fork(); 
pid=fork(); 
if(pid==0) 
{ 
fork(); 
} 
+0

5回。それ以上の説明が必要ですか? – Beta

+0

"アドレス空間の2つの同一のコピーを作成する" - いいえ、そうではありません。既存のアドレス空間の同一のコピーを作成します。最近の実装では、それはしません。オリジナルと同じページをすべて参照する新しいアドレス空間を作成するだけですが、コピー時にコピーをマークします。 – twalberg

答えて

0

ような何かを得るために少し余分なコードを追加します、コンパイルし、実行し、その出力をチェックし

#include <stdio.h> 
#include <unistd.h> 

int main() 
{ 
    pid_t pid; 
    pid = fork(); 
    if (pid != 0) printf("%d\n", pid); 
    pid = fork(); 
    if (pid != 0) printf("%d\n", pid); 
    if(pid==0) 
    { 
     pid = fork(); 
     if (pid != 0) printf("%d\n", pid); 
    } 
    return 0; 
} 

を:5つのプロセスID

関連する問題