我正在编写一个程序,可以创建多个子进程,即使子进程尚未终止,父进程也会继续执行。但是,一旦它们被终止,我希望在提示用户创建更多子进程之前打印它们。
根据我对(waitpid((pid_t)-1,NULL,WNOHANG)的理解,它应该等待并检查所有已终止的子进程
是否为每个已终止的子进程返回多个返回值?
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读取waitpid)
谢谢!
答案 0 :(得分:0)
更好的做法是使用SIGCHLD
信号,当其中一个孩子死亡时,该信号被发送到父进程。因此,在父母中捕捉它可以让你做出你需要的每一个决定,例如通过等待你基本上做的方式构建一个当前死亡的孩子的列表(在非阻塞模式下循环waitpid
)。请注意每次对waitpid
的调用都会抓住一个死的过程(不要按照你的方式调用它,对此主题有评论)。然后在打印提示之前,您可以打印此列表的内容,同时清理该列表。在此期间要小心暂时阻止SIGCHLD
传递,以防止自动并发列表管理。