2
從Unix網絡編程VOL1第三版部分提取5.10 wait和waitpid函數功能如何確保'waitpid函數(-1,&統計,WNOHANG)`收集所有的子進程
#include "unp.h"
void
sig_chld(int signo)
{
pid_t pid;
int stat;
while ((pid = waitpid(-1, &stat, WNOHANG)) > 0) {
printf("child %d terminated\n", pid);
}
return;
}
...
// in server code
Signal(SIGCHLD, sig_chld); // used to prevent any zombies from being left around
...
..
// in client code
The client establishes five connection with the server and then immediately exit
...
參考waitpid:
返回值
waitpid函數():成功,返回子進程ID,其狀態 公頃改變了;如果指定了WNOHANG,並且存在一個或多個由pid指定的子(ren) ,但尚未更改狀態,則返回0爲 。出錯時,返回-1。
根據上述文件,waitpid
將返回0
如果此時沒有子進程已終止。如果我理解正確,這將導致功能sig_chld
從while
聲明中斷。
問題>因此,我們如何保證這個信號處理程序可以確保收集所有終止的子進程?