【发布时间】:2016-02-01 20:47:44
【问题描述】:
我正在派生一个子进程以使用execve 运行命令。我正在安装和定义 3 个信号处理程序:SIGCHLD、SIGINT 和 SIGSTP,如下所示:
void sigchld(int sig)
{
while((pid=waitpid(-1,&stat,WNOTRACE|WNOHANG))>0)
{
if(WIFEXITED(stat))
//normal exit: Delete child from job list
if(WIFSIGNALED(stat))
//interrupted by signal: delete job from job list
if(WIFSTOPPED(stat))
//Stopped: put child in background
}
}
//SIGINT Handler:
kill(-pid,sig)
//SIGSTOPPED Handler:
kill(-pid,sig)
现在,当我运行一个进程并将其放入后台(ctrl z)循环(100 次)时,大多数情况下我会收到错误:waitpid error: Interrupted system call
为什么我会得到这个?
【问题讨论】:
-
请显示完整的代码。如图所示的代码没有发出“
waitpid error: Interrupted system call” -
waitpid()通过WNOHANG预计不会因EINTR而失败。