我目前在系统编程课程中,今天我们查看了等待系统调用函数。我正在阅读有关waitpid()系统调用的部分,并在选项部分中列出了一个名为WNOHANG的部分。
pid_t waitpid*(pid_t pid, int *status, int options);
WNOHANG:如果pid(来自参数)指定的子项尚未更改状态,则立即返回,而不是阻塞。在这种情况下,waitpid()的返回值为0.如果调用进程没有与pid中的规范匹配的子进程,则waitpid()将失败并显示错误ECHILD。
我了解waitpid()是为了解决wait()中的限制而实现的;但是,我不确定为什么要使用WNOHANG选项标志。
如果我要做出猜测,那么父进程可以预先形成其他任务,并可能继续检查其子进程以查看其中是否有任何已终止。排除恶魔进程在后台的位置并等待请求。
任何情境例子或常规例子都会有所帮助。
提前致谢!
答案 0 :(得分:2)
您不需要继续检查孩子。是SIGCHLD信号处理者的工作。每次触发此处理程序时,都会检查已终止的子项:
pid_t pid;
int status;
while ((pid=waitpid(-1,&status,WNOHANG)) > 0)
{
//process terminated child
}