【发布时间】:2018-04-11 23:58:53
【问题描述】:
我正在编写一个程序,其中可以创建多个子进程,并且即使子进程尚未终止,父进程也会继续执行。但是,一旦它们被终止,我希望在提示用户创建更多子进程之前打印它们。
根据我对(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)
谢谢!
【问题讨论】:
-
为什么每次迭代都调用
waitpid两次? “返回多个返回值”是什么意思? -
调用
waitpid(-1, ...)不会等待所有子进程。它等待任何一个子进程。 -
感谢您的回复! ibm.com/support/knowledgecenter/en/SSLTBW_2.2.0/… 哦,我明白了,基于此,我认为它等待查看自上次创建进程以来已经结束了多少子进程。例如,如果创建了三个子进程并终止了两个子进程,我怎么知道要跟踪终止的两个子进程?如果它等待任何一个子进程,我怎么知道要跟踪其他终止的进程?
-
你跟踪哪个进程被
waitpid()的返回值终止,这是退出/终止/停止的进程的PID。 -
您真的在使用 z/OS 吗?