[英]Wait for all child process to exit
我試圖在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)
,則在wc的輸出中間顯示“test”,如果我使用while (wait(NULL) > 0)
; 它進入了無限循環。
編輯 :解決方案是關閉管道( close(fd[0]); close(fd[1]);
)等待之前。 如果我理解這項工作的原因,我會再次編輯。
每次調用wait(2)
阻止父進程,直到其子進程退出。 因此,如果要阻止父進程直到所有子進程都退出,則必須在for循環中調用wait()
,就像子進程一樣多。
while (wait(NULL) > 0)
將不起作用,因為wait()
返回捕獲的子進程的PID,所以它總是為true,導致無限循環。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.