Я написал эту программу, чтобы проверить блокировку сигнала 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);
}
Спасибо! Я забыл это заявление! –