gpt4 book ai didi

c - (waitpid((pid_t)-1, NULL, WNOHANG) 如何跟踪要返回的子进程?

转载 作者:太空宇宙 更新时间:2023-11-04 00:00:27 25 4
gpt4 key购买 nike

我正在编写一个程序,其中可以创建多个子进程,并且即使子进程尚未终止,父进程也会继续执行。但是,一旦它们终止,我希望在提示用户创建更多子进程之前打印它们。

根据我对(waitpid((pid_t)-1,NULL,WNOHANG)的理解,它应该等待并检查所有终止的子进程

  • 如果没有终止进程则返回 0
  • 返回终止进程的pid
  • 错误返回-1

它是否为每个终止的子进程返回多个返回值?

pid_t temp;
while(waitpid((pid_t)-1, NULL, WNOHANG)){
temp = (waitpid((pid_t)-1, NULL, WNOHANG)
if(temp == -1)
//error code
else if(temp == 0)
break;
else{
//fprintf pid of terminated child process

//this statement never gets executed when I run the code
}
}

(不是寻找代码;只是想知道我是否正确理解了这个概念:-/通读 man for waitpid)

谢谢!

最佳答案

一个更好的做法是使用 SIGCHLD 信号,当它的一个子进程死亡时,它被发送到父进程。因此,在 parent 中捕获它可以让你做出你需要的每一个决定,例如通过等待你基本上所做的方式构建一个当前死亡的 child 列表(在非阻塞模式下循环 waitpid )。请注意,对 waitpid每次 调用都会捕获死进程(不要完全按照您的方式调用它,关于这个主题有评论)。然后就在打印提示之前,您可以打印该列表的内容,同时清理该列表。在此期间注意暂时阻止 SIGCHLD 传递,以防止自动并发列表管理。

关于c - (waitpid((pid_t)-1, NULL, WNOHANG) 如何跟踪要返回的子进程?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/47024848/

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