0

このコードがあるとしましょう

for (int n = 0; n < 4; ++n)
{
   if (fork())
   {
      // do something
      // if some condition is met
      // kill the parent
      // else, just return 
   }
   else
      printf("cannot get a process\n");
}

並行して実行される4つの子プロセスを作成しますか?または、次々に実行される4つを作成しますか(子プロセスが戻るまで親のループは進行しないため)?

ありがとうございました

PS:これは悪い習慣かもしれないことを私は知っています(つまり、子供から親を殺すとゾンビが回りますが、今はそれを無視しましょう!)。

4

1 に答える 1

2

コードを次のように書き直します。

for( int n = 0; n < 4; ++n ) {
    switch( fork()) { 
        case 0: /* child */
            /* Do stuff */
            exit( 0 );
        case -1:
            perror( "fork" );
            exit( 1 );
        default:  /* parent */
            /* do stuff, but don't wait() or terminate */
    } 
}

子供たちは確かに並行して走ります。1つの子がすばやく実行され、次の実行の前に終了する可能性は十分にありますが、その場合、子は効果的に連続して実行されます。親が子を待つ場合、それらは連続して実行されます。また、親がwait()ここにいない場合、およびwaitループの外にいない場合、子は終了時にゾンビになります。親が終了するとすぐに、ゾンビの子はinitによって継承され、initはそれらを待機して、プロセステーブルから削除します(したがって、ゾンビではなくなります)。

于 2012-10-03T16:29:10.267 に答える