多叉,等待第一个完成
我是一种新的所有fork
,exec
和wait
功能。我有一个任务,这需要我的主要过程我需要时间,然后使用所有的孩子为每个过程写入不同的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
}
}
在此先感谢。任何帮助,将不胜感激。
只需使用wait(NULL)
。正如文件所述,它会一直等到其中一个孩子终止。所以它会做你想做的,即:等待第一个孩子完成。
如果第一个进程退出,父进程继续,并从fifo读取第一个进程写入的数据,如果其余进程尚未完成其作业并且父进程想从中读取,会发生什么情况?有没有办法让它等待呢? –
这是一个不同的问题。我不确定我了解你的问题。也许你应该阅读关于该主题的一些基本理论。你可以用'waitpid(pid,NULL,0)'等待一个特定的孩子。 –
“如果其余的流程没有完成他们的工作,并且父母想要从他们那里读取,会发生什么?”。这取决于您从FIFO中读取多少个字节。如果读取的字节多于孩子写入的字节数,则通常会阻止“read()”。 –
它甚至不会编译。 'fork'不是函数调用 –
哎呀对不起,我会编辑 –
不要只编辑。发布完整的代码。 –