簡體   English   中英

等待所有子進程退出

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM