我已经理解:1)waitpid用于等待孩子的死亡,然后收集SIGCHLD和孩子的退出状态等.2)当我们有一个SIGCHLD的信号处理程序时,我们做了一些与清理相关的事情.孩子或其他东西(由程序员决定)然后做一个waitpid,这样孩子就不会去僵尸然后回来.
现在,当我们执行fork/exec并且子进程返回时,我们是否需要在程序中同时使用1和2?如果我们两者都有,则首先获取SIGCHLD,因此首先调用信号处理程序,因此成功调用其waitpid而不是父进程代码中的waitpid,如下所示:
my_signal_handler_for_sigchld
{
do something
tmp = waitpid(-1,NULL,0);
print tmp (which is the correct value of the child pid)
}
int main ()
{
  sigaction(SIGCHLD, my_signal_handler_for_sigchld)
  fork()
  if (child) //do something, return
  if parent // waitpid(child_pid, NULL,0); print value returned from this waitpid - it is -1
}
感谢有人帮助我理解这一点.