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

时间:2016-11-16 17:48:55

标签: c fork wait mkfifo

我是所有forkexecwait函数的新手。我有一个作业,这需要我fork我的主要过程i次,然后使用所有的孩子写入每个过程的不同的fifos。例如,如果我有3个孩子,我将不得不写3个不同的fifos。然后,我的父进程必须等待第一个完成在任何fifo上写入,并从该特定fifo读取数据。困扰我的是我的父进程必须等待第一个完成而不是所有进程完成。如果我不得不等待所有,我会使用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
     }
 }

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

1 个答案:

答案 0 :(得分:1)

只需使用wait(NULL)即可。正如文档所说,它会等到其中一个孩子终止。所以它会做你想要的,即:等待第一个孩子完成。