waitpid返回pid = 0和WIFEXITED = 1如何获得pid?

时间:2014-01-31 15:59:54

标签: c linux pid waitpid

步骤:

在另一个程序组中分叉并启动进程
使用SIGTSTP停止流程
使用SIGCONT重启过程
流程结束了

问题: SIGCHLD处理程序具有:

waitpid(-1, &status, WNOHANG | WUNTRACED);

返回时pid = 0且WIFEXITED = 1 所以,这个过程退出了,但是我无法得到pid? 我需要pid。

从手册页:“如果指定了WNOHANG并且存在pid指定的一个或多个子(ren),但尚未更改状态,则返回0”“但似乎状态已更改为退出。” / p>

2 个答案:

答案 0 :(得分:4)

如果返回的pid为0,则状态毫无意义。想一想。返回0表示您有一个或多个尚未更改状态的子项。尚未改变状态的孩子的状态是什么?如果有多个子节点,哪个子节点是引用的状态码?

这类似于在成功通话时检查errno。来自之前呼叫的任何内容都可以在errno中,但它与最近成功的呼叫无关,因为errno通常不会成功设置。

答案 1 :(得分:1)

waitpid的返回值是等待的子项的PID。