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

How does (waitpid((pid_t)-1, NULL, WNOHANG) keep track of child processes to be returned?

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

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

每个终止的子进程是否 return 多个 return 值?

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 信号,当其 children 之一死亡时,该信号被发送到 parent 进程。因此,在 parent 中捕获它可以让你做出你需要的每一个决定,例如通过等待你基本上做的方式构建一个当前死亡的列表 children (在非阻塞中循环 waitpid模式)。请注意 eachwaitpid 的调用会捕获死进程(不要完全按照您的方式调用它,关于这个主题有评论)。然后就在打印提示之前,您可以打印该列表的内容,同时清理该列表。期间注意暂时屏蔽SIGCHLD投递,防止auto-concurrent列表管理