2016-11-07 2 views
1

このプログラムで作成するプロセスの数はわかりません。私はwhileループで3つの子プロセスを作成するつもりだと思います。次に、各子プロセスが2回フォークすることになります。つまり、2つの子プロセスと、その子プロセスによって作成されたプロセスがフォークし、各状態に対して4つの子プロセスが作成されます。合計で12のプロセスがあります。本当?フォーク()システムコールは、子供に親プロセスに子のPIDを返し、0ためこのコードが生成するプロセスの数はいくつですか?

#include <unistd.h> 
#include <sys/types.h> 
#include <stdio.h> 
#include <stdlib.h> 

int main(){ 
pid_t childpid; 
int i=0; 
while((childpid>0) && (i<3)) 
{ 
     childpid=fork(); 
     i++; 
} 
if(childpid==0){ 
     fork(); 
     fork(); 
} 
exit(0); 
} 
+2

用紙にトレースします。それは私がUniでオペレーティングシステム設計について学ぶときに何をしたのかです。 – StoryTeller

+0

先週のコードスニペットを見たと思います.... –

+0

'pid_t childpid = getpid();'がありません。 – jfs

答えて

0

プロセスの総数が13

while((childpid>0) && (i<3)) 

では、親のために実行されますプロセス。

したがって、whileループは、childpid変数値0を持つ3つの子プロセスと、最後にforkされた子のchildpid変数値を持つメイン親プロセスを生成します。最初フォーク呼び出しでスポーン1子前から状態

if(childpid==0){ 
     fork(); 
     fork(); 
} 

各子プロセスについて今4

まで

合計プロセス。 2番目のフォークは、最初のフォークの2つの処理から別の2つの新しいプロセスを生成します。したがって、各子プロセスのために、新たに3つのプロセスが生成されます。 したがって、whileループの3つの子プロセスについて、9つの新しいプロセスを生成します。

したがって、合計プロセス数は4 + 9 = 13となります。

関連する問題