相关疑难解决方法(0)

使用waitpid还是sigaction?

我已经理解: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
}
Run Code Online (Sandbox Code Playgroud)

感谢有人帮助我理解这一点.

c linux operating-system

7
推荐指数
2
解决办法
5189
查看次数

标签 统计

c ×1

linux ×1

operating-system ×1