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()在這裏是否正常工作,儘管它可能會阻塞。
只要處理結束,該循環將只會循環。否則,如果沒有子進程終止,它只會導致一次調用'waitpid',返回'0'並跳出循環。 –
如果我把這個代碼放入一個信號處理程序(捕獲SIGCHLD信號),由於有一個孩子已經終止了,會等待()會正常工作嗎? – Nmzzz
如果您收到一個'SIGCHLD'信號,您知道某個子進程發生了什麼,因此可以在不阻塞的情況下調用wait。 –