我正在分叉一个子进程以使用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
为什么我会得到这个?