unp 118 页
当服务器程序中的 sig_chld(int signo) 改用 waitpid 并指定WNOHANG(while循环) 选项时,就可以处理同时多个客户断开的情况
1 void 2 sig_chld(int signo) 3 { 4 pid_t pid; 5 int stat; 6 7 while ( waitpid(-1, &stat, WNOHANG) < 0) 8 printf("child %d terminated "); 9 10 return ; 11 }
因为当 waitpid 指定WNOHANG时,waitpid 在没有指定信号到达时, 他返回0。while循环结束
而wait 不能使用while 循环(因为当没有信号时,会阻塞),所以他只能执行一次,不能处理多个信号同时到达的情况