0

私はこの機能を持っています:

 void set_background(int n){
       int i;
       for(i=0;i<n;i++)
          fork();
  }

このプロセスは、フォークで n 個のプロセスを設定する必要があります。fork() を実行して for に n 個のプロセスを設定するにはどうすればよいですか? 親プロセスと子プロセスがあり、4 つのプロセスで i=1 になる場合など

4

1 に答える 1

3

からの戻り値を監視する必要がありますfork()

void set_background(int n)
{
    for (int i = 0; i < n; i++)
    {
         pid_t pid;
         if ((pid = fork()) < 0)
             ...process error...
         else if (pid == 0)
         {
             ...do childish things...
             exit(EXIT_FAILURE);
         }
    }
    /* If here, must be parent */
}

「幼稚な」処理が戻らないようにすると、制御の流れが簡素化されます。私はexit(EXIT_FAILURE);電話でそれを強制しました。

元のコードでは、ループの最初の反復で親が分岐するため、ループの最後で 2 つのプロセスが実行されていることに注意してください。2 回目の反復の後、親と子の両方がフォークするため、4 つのプロセスが実行されます。N 回目の繰り返しの後、2 N 個のプロセスが実行されています。これが望ましい効果になることはめったにありません。これの無制限ループ バージョンは「フォーク ボム」と呼ばれ、マシンを屈服させることができます。

于 2012-11-25T14:48:42.003 に答える