{
if(fork() && fork())
{
fork();
}
if(fork() || fork())
{
fork();
}
printf("hello");
return 0;
}
私はfork()
がここでどのように動作するかを取得していないですし、何回ハローが印刷されます。
私はちょうどfork() && fork()
が1つの親に対して合計3つのプロセスを生成することを知っています。同様に、1つの親に対して3つのプロセスが生成されます。ここでfork()はどのように動作しますか?
最初のif
条件の後、3つのプロセスが作成され、親プロセスのみがifブロックに入ります。現在、合計4つのプロセスが存在します。さて、さらに進む方法、私は完全にこれに苦しんでいますか?
可能であれば、ツリー図を表示してください。最初のブロックについて
デバッガを使用してプログラムを実行します。また、関連するシステムコールを理解するには、[strace(1)](http://man7.org/linux/man-pages/man1/strace.1.html)(おそらく '-f'オプション付き)を使用します。ところで、あなたの質問は宿題のように見えます。ですから、[フォーク(システムコール)](https://en.wikipedia.org/wiki/Fork_%28system_call%29)、そしてhttp://advancedlinuxprogramming.com/ –
BTWの関連する章を慎重に読んで、 'printf '文を' printf( "hello in%d parent%d \ n"、(int)getpid()、(int)getppid());また、プログラムの先頭に 'printf(" start pid%d \ n "、getpid());を追加すると、多くの手助けが必要になります。 –
最後に、ローカル変数に 'fork'の結果を明示的に保持する必要があります。失敗に対して' fork'をテストする必要があります。 –