-3

次のようなコードがあるとしましょう


    switch (fork()) {
      case -1:
          //error checking
          break; 
      case 0:
          //child code
          break;
      default:
          int i;
          for (i = 0; i < n; i++) {
              switch (fork()) {
                  case -1:
                      //error checking
                      break; 
                  case 0:
                      //exec
                      break;
                  default:
                      //parent that waits for all childs to be created
                      break; 
              }
         }
    }

2番目の親プロセスに他のすべてのプロセスが正確に作成されるのを待たせるにはどうすればよいですか...ループを作成する必要があると言われましたが、正確に実装する方法がわかりません。n個の子プロセスがあると仮定します。

4

1 に答える 1

2

要件を少し誤解している可能性があると思います。「第二の親」という言葉は、私にはあまり意味がありません。

要件として最も理にかなっているのは次のとおりです。

  • 親プロセスは N 個の子プロセスを起動します。
  • それぞれの子供は適切なことをします。
  • 親プロセスは、N 個の子プロセスがすべて完了するまで待機する必要があります。
  • その後、それ自体の完了を報告できます (または、他の作業を続行するか、または ...)。

概説すると、次のようになります。

int pid;
for (int i = 0; i < N; i++)
{
    switch (pid = fork())
    {
    case 0:
        be_childish(i);
        /*NOTREACHED*/
        break;
    case -1:
        // Print error report
        break;
    default:
        printf("Started PID %d\n", pid);
        break;
    }
}

int status;
while ((pid = wait(&status)) > 0)
{
    printf("PID %d exited (status 0x%.4X)\n", pid, status);
}

printf("All done!\n");

/*NOTREACHED*/コメントに注意してください。子プロセスは関数内から終了すると仮定しbe_childish()ます。exit(1);コードは、または おそらく_exit(1);またはを含めることで、損傷がないことを保証でき_Exit(1);ます。子プロセスがループを継続しないことがかなり重要です。

于 2012-06-02T07:43:41.690 に答える