Когда обработчик сигнала возвращается, маска сигнала, которая действовала до обработки сигнала, восстанавливается атомарно как часть процесса возврата. Это произойдет, если вы не выпрыгнете из обработчика сигнала с помощью longjmp
или siglongjmp
, и в этом случае вам решать, хотите ли вы вручную сохранить и восстановить маску сигнала.
Интересно отметить, что если вы используете флаг SA_SIGINFO
для настройки обработчика сигнала в форме трех аргументов, ucontext_t
, на который указывает третий аргумент, содержит элемент sigset_t uc_sigmask
, отражающий сохраненную маску сигнала. Кроме того, я не уверен, санкционировано ли это использование POSIX, но на всех известных мне реальных системах вы можете изменить uc_sigmask
перед возвратом из обработчика сигнала, чтобы установить другую маску сигнала (в отличие от восстановления исходный), когда обработчик сигнала возвращается. Это может быть использовано, например, если вы хотите повторно поднять сигнал, который вы только что обработали, но оставить его заблокированным при возврате, чтобы он действительно обрабатывался позже, когда сигнал снова разблокируется прерванным кодом или когда sigwaitinfo
или аналог называется.