2013-02-04 57 views
2

我知道wait()和waitpid()之間的區別之一是waitpid有一個WNOHANG選項,它告訴waitpid在運行的孩子時不會阻塞尚未終止。如:在while循環中使用wait()而不是waitpid()

while ( (pid = waitpid(-1, &stat, WNOHANG)) > 0) 
    printf("Child %d terminated\n", pid); 

如果我使用的wait(),而不是waitpid函數(),沒有從是否有正在運行尚未終止的孩子堵的方式來防止等待()。但是,我想知道wait()在這裏是否正常工作,儘管它可能會阻塞。

+1

只要處理結束,該循環將只會循環。否則,如果沒有子進程終止,它只會導致一次調用'waitpid',返回'0'並跳出循環。 –

+0

如果我把這個代碼放入一個信號處理程序(捕獲SIGCHLD信號),由於有一個孩子已經終止了,會等待()會正常工作嗎? – Nmzzz

+0

如果您收到一個'SIGCHLD'信號,您知道某個子進程發生了什麼,因此可以在不阻塞的情況下調用wait。 –

回答

-1

我們不能稱之爲等待在一個循環中,因爲沒有辦法阻止等待從是否有正在運行尚未終止兒童阻塞。