gpt4 book ai didi

linux - 何时以及为何应将 WNOHANG 与 waitpid() 一起使用?

转载 作者:太空狗 更新时间:2023-10-29 11:08:34 27 4
gpt4 key购买 nike

我目前正在上系统编程课,我们今天复习了 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/

27 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com