У меня есть простая программа для демонстрации обработки сигналов в C для Linux. Я просто сложно это для экспериментирования ..Linux: игнорирование сигнала внутри обработчика сигнала, игнорирование всех таких последовательных сигналов
void sigquit(int signo)
{
printf("Recieved signo : %d\n",signo);
signal(SIGQUIT,SIG_IGN);
}
int main()
{
/* register the signal handler */
if(signal(SIGQUIT,sigquit) == SIG_ERR)
{
perror("Error handling SIGQUIT signal");
exit(1);
}
for(;;);
return 0;
}
Я получаю результат:
^\Recieved signo : 3
^\^\^\^\^\^\^\
, тогда как я ожидал этого:
^\Recieved signo : 3
^\Recieved signo : 3
^\Recieved signo : 3
^\Recieved signo : 3
Почему только первый раз, когда мой обработчик был вызван и не далее. Я ожидал, что сигналы будут впервые поступать в основной поток, а затем передаваться обработчикам.
Так в чем же идея этой строки 'сигнал (SIGQUIT, SIG_IGN),' хотя? ;-) – alk