次の C コードで作成されたプロセスの数を把握しようとしています。
int main ()
{
fork();
if (fork()) {
fork();
}
fork();
return 0;
}
私が混乱していることがいくつかあります:
fork() が呼び出されるたびに、子はコードの最初から開始しますか、それとも現在の fork() が作成した場所から開始しますか? たとえば、3 行目の最初の fork が呼び出された場合、4 行目または 1 行目で子を開始しますか? これはばかげた質問だと思います。b/c 各子が最初から開始した場合、無限ループが作成されますが、この仮定については安全を期したいと思います。
次に、fork が呼び出されると、現在のプロセスが 2 つの新しいプロセスに分割され、1 つが親で、もう 1 つが子になりますか、それとも現在のプロセスが自動的に親になるので、実際には 1 つの余分なプロセスが作成されます。
最後に、if ステートメントを使用すると、fork が実際に親の場合は親 ID の値を返し、子の場合は常に 0 を返すと確信しています。では、生成されたすべての子に対して if ステートメントが false になると仮定するのは正しいでしょうか?
上記のすべての仮定に基づいて、これが私が思いついたプロセス ツリーです。ツリー内の子の数は、フォークが現在発生しているコード行を表します。
main
| | | |
3 4 5 7 // the main/initial process calls fork 4 times
| | | | |
4 5 7 7 7 // the first fork will see 3 additional forks since it was called
| | // at line 3 and I assume resumes at line 4.
7 7 // The second and third original children would each only callthe
// very last fork(). The last fork has no other forks following.
したがって、合計 10 個のプロセスが作成されます (main を含む)。私はそれを間違っていましたか?