1

fork() コマンドを徹底的に行っているときに、質問にぶつかりました。

時間が 0 秒から始まる場合、12 秒の終わりまでにいくつのプロセスが作成されますか? プロセス ID は 0 から始まります。

擬似コード

 while(true)
        {
             sleep 1second;
             if( getpid() % 2 == 0 )
             {
                     fork();
                     printf("Hello\n");
             }
       }

システムで上記のコードを実行すると、コンソールに出力が表示されません。いいえ。12 秒の終わりのプロセスは OS に依存しますか? fork() が苦手なため、提案が必要です

4

2 に答える 2

2

プロセス ID が「0 から始まる」のはいつからですか? システムの起動時でさえありません。最初のプロセスのIDは1です:-)

自分のプロセス ID が偶数の場合にのみ fork() を行っています。つまり、プログラムを数回実行すると、何かが実行される場合と実行されない場合があります。

于 2012-07-08T18:50:31.833 に答える
1

あなたの後にこれを追加してくださいprintf

fflush(stdout);

しかし、あなたの論理には根本的な問題があります。fork()子では 0 を返し、親では子 pid を返します。チェックしないので、親と子の両方がループを実行し続け、それが何度も何度も繰り返され、永遠に繰り返されます。ループ本体を次のように変更する必要があります。

if(fork() == 0)
{
  printf("Hello!\n");
  fflush(stdout);
}
于 2012-07-08T18:48:59.910 に答える