linux进程管理之wait/waitpid处理僵死进程详解( 二 )


如下图分别为创建的5个连接、客户端exit后服务端的四个僵死子进程:
linux进程管理之wait/waitpid处理僵死进程详解文章插图
linux进程管理之wait/waitpid处理僵死进程详解文章插图
解决方法:
使用waitpid而不是wait 。 如下的处理函数管用 , 因为在一个循环内调用waitpid , 以获取进程终止状态 。 waitpid函数的参数options指定为WNOHANG , 告知waitpid在尚有未终止的子进程时 , 不阻塞 。 而使用wait无法阻止其在还有子进程未结束时阻塞 。
//使用waitpid的信号处理函数void onSignalCatch(int signalNumber){pid_t pid;int stat;//pid = wait(//下列函数的第一个参数为-1表示等待第一个终止的子进程while ((pid = waitpid(-1,return; }结果如下:
linux进程管理之wait/waitpid处理僵死进程详解文章插图
linux进程管理之wait/waitpid处理僵死进程详解文章插图
至此 , 客户服务器代码就完成了 , 加入了对僵死进程的处理 。