【发布时间】:2014-03-23 16:44:59
【问题描述】:
我正在尝试在 c 中编写一个 shell 管道,但我的程序在完成之前不会等待所有子进程。
int fd[2];
if (fork() == 0)
{
dup2(fd[1], 1);
close(0);
execlp("ls", "ls, NULL);
}
if (fork() == 0)
{
dup2(fd[1], 1);
close(0);
execlp("wc" "wc", NULL);
}
wait(NULL);//this dont wait all child
//wait(NULL); wait(NULL); this go into infinite loop
//while (wait(NULL) > 0); this go into infinite loop
write(1, "test", 4);
如果我使用wait(NULL),“test”会显示在wc的输出中间,如果我使用while(wait(NULL) > 0);它进入了一个无限循环。
编辑:解决方案是在等待之前关闭管道 (close(fd[0]); close(fd[1]);)。如果我理解它的工作原理,我会再次编辑。
【问题讨论】: