等待创建所有子进程 - C.

时间:2012-06-02 06:37:16

标签: c process parent wait

假设我有一个如下代码


    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; 
              }
         }
    }

如何让第二个父进程等待所有其他进程完全创建... 我被告知我必须做一个循环,但我不知道如何完全实现它。假设有n个子进程。

1 个答案:

答案 0 :(得分: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);来确保无损坏。子进程不会继续循环是非常重要的。