【发布时间】:2014-01-16 08:09:09
【问题描述】:
假设我们的进程创建了一个子进程,然后调用wait()。
当我尝试发送信号()或做时
kill -SIGCHLD <PID>
什么都没有发生。
所以问题是:Linux 中的进程如何确定信号SIGCHLD 不是由孩子发送的?或者,也许还有其他机制?
【问题讨论】:
标签: signals fork parent-child kill sigchld
假设我们的进程创建了一个子进程,然后调用wait()。
当我尝试发送信号()或做时
kill -SIGCHLD <PID>
什么都没有发生。
所以问题是:Linux 中的进程如何确定信号SIGCHLD 不是由孩子发送的?或者,也许还有其他机制?
【问题讨论】:
标签: signals fork parent-child kill sigchld
内核会处理这个问题。
wait()不是监听(任何)SIGCHLD 发送到进程的信号处理程序,因为它可能通过sigaction() 或signal() 建立。
来自wait()'s POSIX spec(我强调):
wait() 和 waitpid() 函数应获取与 调用者的子进程之一相关的状态信息。
【讨论】: