3

脚步:

在不同的程序组中分叉并启动进程
使用 SIGTSTP 停止进程
使用 SIGCONT 重新启动进程
进程结束

问题:SIGCHLD 处理程序具有:

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

在返回 pid=0 和 WIFEXITED=1 时,进程退出,但我无法获取 pid?我需要pid。

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

4

2 回答 2

4

如果返回的 pid 为 0,则状态是没有意义的。考虑一下。返回 0 表示您有一个或多个孩子尚未更改状态。尚未改变状态的孩子的状态会是什么?如果有多个孩子,状态码引用哪个孩子?

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

于 2014-01-31T16:35:11.920 回答
1

的返回值waitpid是被等待的孩子的 PID。

于 2014-01-31T16:01:53.577 回答