作者热门文章
- c - 在位数组中找到第一个零
- linux - Unix 显示有关匹配两种模式之一的文件的信息
- 正则表达式替换多个文件
- linux - 隐藏来自 xtrace 的命令
我目前正在上系统编程课,我们今天复习了 wait 系统调用函数。我正在阅读有关 waitpid() 系统调用的部分,并在选项部分列出了一个名为 WNOHANG 的部分。
pid_t waitpid*(pid_t pid, int *status, int options);
WNOHANG: If no child specified by pid (from the parameters) has yet changed state, then return immediately, instead of blocking. In this case, the return value of waitpid() is 0. If the calling process has no children that match the specification in pid, waitpid() fails with the error ECHILD.
我理解 waitpid() 的实现是为了解决 wait() 中的限制;但是,我不太确定您为什么要使用 WNOHANG 选项标志。
如果我要进行猜测,那么父进程可以执行其他任务,并可能继续检查其子进程以查看是否有任何子进程已终止。某种恶魔进程如何坐在后台等待请求。
任何情境示例或常规示例也会有所帮助。
提前致谢!
最佳答案
您不需要一直检查 child 。这是 SIGCHLD 信号处理程序的工作。每次触发此处理程序时,您都会检查已终止的子项:
pid_t pid;
int status;
while ((pid=waitpid(-1,&status,WNOHANG)) > 0)
{
//process terminated child
}
关于linux - 何时以及为何应将 WNOHANG 与 waitpid() 一起使用?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/28840215/
我是一名优秀的程序员,十分优秀!