多叉,等待第一个完成

问题描述:

我是一种新的所有forkexecwait功能。我有一个任务,这需要我的主要过程我需要时间,然后使用所有的孩子为每个过程写入不同的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 
    } 
} 

在此先感谢。任何帮助,将不胜感激。

+0

它甚至不会编译。 'fork'不是函数调用 –

+0

哎呀对不起,我会编辑 –

+0

不要只编辑。发布完整的代码。 –

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

+0

如果第一个进程退出,父进程继续,并从fifo读取第一个进程写入的数据,如果其余进程尚未完成其作业并且父进程想从中读取,会发生什么情况?有没有办法让它等待呢? –

+0

这是一个不同的问题。我不确定我了解你的问题。也许你应该阅读关于该主题的一些基本理论。你可以用'waitpid(pid,NULL,0)'等待一个特定的孩子。 –

+0

“如果其余的流程没有完成他们的工作,并且父母想要从他们那里读取,会发生什么?”。这取决于您从FIFO中读取多少个字节。如果读取的字节多于孩子写入的字节数,则通常会阻止“read()”。 –