【发布时间】:2014-11-13 07:20:14
【问题描述】:
我编写了这个程序来检查 SIGQUIT 信号的阻塞。问题是恢复到之前的状态后,信号处于挂起状态,但没有被传递。
这是主程序
sigset_t newmask, oldmask, pendmask;
if(signal(SIGQUIT,sig_quit)==SIG_ERR) //Register signal handler
printf("\nerror\n");
sigemptyset(&newmask);
sigaddset(&newmask,SIGQUIT);
sigprocmask(SIG_BLOCK,&newmask,&oldmask); //Save previous value and block SIGQUIT
sleep(5);
sigpending(&pendmask);
if(sigismember(&pendmask,SIGQUIT)){ //Check if SIGQUIT is pending
printf("\nSIGQUIT pending..\n");
fflush(stdout);
}
sigprocmask(SIG_BLOCK,&oldmask,NULL); //Restore old value of sigset
printf("\nSIGQUIT unblocked\n");
fflush(stdout);
sleep(5); //Sleep again to check if everything is A-okay!
我可以理解,在第一次睡眠时,信号被阻塞了。但即使在解除阻塞后,在第二个睡眠函数中,程序也没有响应 SIGQUIT。
这可能是什么问题?
PS 我正在使用 CentOs
这是处理函数
void sig_quit(int i)
{
printf("\nSIGQUIT caught\n");
fflush(stdout);
signal(SIGQUIT,SIG_DFL);
}
【问题讨论】:
标签: linux centos signals signal-handling