多个分叉,等待第一个完成

Multiple forks, wait for the first to finish

我对所有 forkexecwait 函数有点陌生。我有一个任务,它需要我 fork 我的主进程 i 次,然后使用所有 children 为每个进程写入不同的 fifos。例如,如果我有 3 个 children,我将不得不写入 3 个不同的 fifos。然后,我的 parent 进程必须等待第一个进程完成对任何 fifo 的写入,然后从该特定 fifo 读取数据。让我感到困惑的是,我的 parent 进程必须等待第一个进程完成,而不是等待所有进程完成。如果我必须等待所有,我会使用 while(wait(NULL)>0)。但是在这种情况下你会怎么做?我在下面写了一个示例代码:

pid_t *pid;
int    i;

pid = malloc(sizeof(pid_t)*children);
for(i=0;i<children;i++)
{
     if((pid[i]=fork())<0)
     { /* error */ }

     if(pid[i]==0)
     {
          //WriteOnFifos
          return 0;
     }
     else
     {
           //wait for the first process to finish
     }
 }

提前致谢。任何帮助,将不胜感激。

只需使用wait(NULL)。如文档所述,它将等到其 children 之一终止。所以它会做你想做的,即:等待第一个 child 完成。