1

fork()ループ内の動作に関する質問。が呼び出された場合、 が呼び出されていないとfork()仮定するwait()と、親プロセスはコードを続行し、トップに戻ってq終了するように入力するように求めます。フォークされた子はpid、0 ではなく子の ID に等しい必要があるため、ID とブレークをすぐに出力する必要があります。代わりに、無限ループに入ります。

私が誤解していることを誰か教えてもらえますか?

int main (int argc, char *argv[])
{
    char run[2];
    int pid=0;
    while (run[0]!= 'q')    
    {
         printf("Type q to quit \n");
         fgets (run, 2, stdin);
         pid=fork();
         //wait();
         printf("child ID: %i\n", pid);
         if(pid!=0) { break;}
    }
    
}
4

1 に答える 1

9

戻り値がfork()混在しています。が取得し、親が子の0PID を取得します。

編集者注記: あなたのプログラムは、ループの最初の繰り返しで未定義の動作を引き起こしますrun。おそらく、 の戻り値も確認する必要がfgetsあります。

于 2013-10-16T18:07:49.900 に答える