关于waitpid这个话的理解
看网上的这段话:
“WNOHANG选择项通知内核在没有已终止进程项时不要阻塞” 这个话怎么理解阿 ?
我认为原作者是错误的,因为waitpid(-1, &stat, WNOHANG)在等到第一个子进程退出时候就返回了。
所以还是会有四个僵尸进程。
------解决方案--------------------因为非实时信号不排队,极有可能本次信号处理函数回调时已经有5个SIGCHLD到来过了,那么你必须用非阻塞waitpid循环直到waitpid返回0或者-1&&errno==ECHILD,那么你就可以退出信号处理函数了,之所以敢退出,是因为信号处理函数一旦进入就会屏蔽掉信号,所以不会造成任何时间窗口会丢失信号。
------解决方案--------------------waitpid 带 WNOHANG 参数 返回0,说明当前没有子进程结束
返回-1&&errno==ECHILD 说明当前进程没有子进程或者子进程都结束了