何时以及为什么要使用WNOHANG和waitpid()?

时间:2015-03-03 19:24:35

标签: linux waitpid

我目前在系统编程课程中,今天我们查看了等待系统调用函数。我正在阅读有关waitpid()系统调用的部分,并在选项部分中列出了一个名为WNOHANG的部分。

pid_t waitpid*(pid_t pid, int *status, int options);

WNOHANG:如果pid(来自参数)指定的子项尚未更改状态,则立即返回,而不是阻塞。在这种情况下,waitpid()的返回值为0.如果调用进程没有与pid中的规范匹配的子进程,则waitpid()将失败并显示错误ECHILD。

我了解waitpid()是为了解决wait()中的限制而实现的;但是,我不确定为什么要使用WNOHANG选项标志。

如果我要做出猜测,那么父进程可以预先形成其他任务,并可能继续检查其子进程以查看其中是否有任何已终止。排除恶魔进程在后台的位置并等待请求。

任何情境例子或常规例子都会有所帮助。

提前致谢!

1 个答案:

答案 0 :(得分:2)

您不需要继续检查孩子。是SIGCHLD信号处理者的工作。每次触发此处理程序时,都会检查已终止的子项:

pid_t pid;
int status;
while ((pid=waitpid(-1,&status,WNOHANG)) > 0)
{
  //process terminated child
}