Обработчик сигнала, почему он блокируется при обработке того же сигнала - PullRequest
2 голосов
/ 20 января 2012

Для теоретических целей: я связываю обработчик для SIGINT, используя signal (). Когда этот сигнал обрабатывается, т. Е. Выполняется обработчик сигнала, по умолчанию этот же сигнал блокируется. В чем причина блокировки? Приводит ли это к тупиковой ситуации? Просьба уточнить.

1 Ответ

3 голосов
/ 20 января 2012

Поскольку обработчики сигналов не должны быть реентерабельными.

Обработчик сигнала обычно работает быстро и должен вызывать только асинхронные безопасные функции, т.е. очень ограниченный набор функций, см. signal (7) .

Вы обычно неОн не должен вызываться внутри себя.

Если вы не возвращаетесь из сигнала нормально (или не делаете siglongjmp внутри него), предыдущие маски сигналов восстанавливаются после завершения обработчика сигнала.

Однако вы можете установить обработчик сигнала (через sigaction), который не блокирует сам себя.

По аналогичным причинам на обычных процессорах обработчики intterupt также работают быстро и отключают прерывания.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...