(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 0 应该没有终止的进程
- return 已终止进程的 pid
- return -1 错误
每个终止的子进程是否 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
模式)。请注意 each 对 waitpid
的调用会捕获死进程(不要完全按照您的方式调用它,关于这个主题有评论)。然后就在打印提示之前,您可以打印该列表的内容,同时清理该列表。期间注意暂时屏蔽SIGCHLD
投递,防止auto-concurrent列表管理
我正在编写一个程序,其中可以创建多个子进程,并且即使子进程尚未终止,父进程也会继续执行。但是,一旦它们终止,我希望在提示用户创建更多子进程之前打印它们。
根据我对 (waitpid((pid_t)-1, NULL, WNOHANG) 的理解,它应该等待并检查所有终止的子进程
- return 0 应该没有终止的进程
- return 已终止进程的 pid
- return -1 错误
每个终止的子进程是否 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
模式)。请注意 each 对 waitpid
的调用会捕获死进程(不要完全按照您的方式调用它,关于这个主题有评论)。然后就在打印提示之前,您可以打印该列表的内容,同时清理该列表。期间注意暂时屏蔽SIGCHLD
投递,防止auto-concurrent列表管理