2016-04-13 2 views
0

私はfork関数を完全に理解していませんが、fork()関数からの父子プロセスcontineoやこの行をスキップして次の行に行く方法はわかりません。例えば:私たちは、父が待機のために行く()関数fork関数を実装するが、私は子供が開始どこからかの()から実行するか、彼はそれを脱出して行くことにすることを理解していないものをこのプログラムの子供はどのように動くのですか?

int value = 0; 
if (fork()!=0) 
{ 
wait(&value); 
value = WEXITSTATUS(value); 
value++; 
} 
printf("%d\n",value); 
value+=2; 
exit(value); 

すぐにprintfのために?プログラム全体を複製し、父と息子の両方が、父はifの内側に入るfork() から開始し、そのフォークの戻り値がnull以外であるため、そして

printf("%d\n",value); 
value+=2; 
exit(value); 

に行く後にされ:)

+0

試したときに何が起こったのですか? –

+0

私は実際にはフォークを理解しようとしなかったし、この機能で何が起こるのだろうか – Eli

+1

なぜそれを試してみませんでしたか?それを実行すると、その操作が実証されています。 –

答えて

0

を支援するための 感謝息子はちょうどこの行に行きますが、pidはゼロであるからです。

息子は、value += 2という行のために2を終了します。

父親はその値(つまり値= 2)を増分し(値= 3)、次に2(値= 5)を追加します。

+0

私は子供と父親のプロセスが次に働くならば、出力は0と3の間にあるということを意味しているのでしょうか? – Eli

+0

上記の私の編集を参照してください。 – Boiethios

0

fork()を呼び出すプロセスの基本的にmakes a copyです。

これは、現在の命令ポインタを含むfork()を呼び出したときのそのプロセスの実行時の状態を意味します。親プロセスと子プロセスの主な違いは、古いプロセスの新しいコピーが変更されて、fork()の戻り値が0を返し、古いプロセスがPIDを返すことです。

それ以外の場合、子は親と同じ状態になり、親と同じポイントから実行を継続します。つまり、fork()への呼び出しです。

関連する問題