Во-первых , вы можете использовать sigprocmask с указателем пустого набора .
int sigprocmask(int how, const sigset_t *set, sigset_t *oldset);
а. как можно установить:
SIG_UNBLOCK
(сигнал в наборе удаляется из текущего набора заблокированных сигналов. Разрешается пытаться разблокировать сигнал, который не заблокирован)
б. set
можно установить на NULL
(поскольку вы не хотите изменять заблокированные сигналы)
с. Если oldset
не равно NULL
, предыдущее значение маски сигнала сохраняется в oldset. Ergo, вы получаете заблокированные сигналы в местоположении, адрес которого хранится в oldset.
Во-вторых , для того, чтобы знать, что вы находитесь в подпрограмме обработки сигнала, когда вы пишете определение обработчика сигнала, вы можете принять int signum в качестве параметра , например:
void mySignalHandler(int signum);
Если вы хотите знать, чтобы можно было блокировать некоторые другие сигналы в этот момент времени, вы можете просто иметь функцию блокировки в функции запуска и разблокировки в конце (используя sigprocmask()
). Вы даже можете установить указанные сигналы в состояние SIG_IGN
, чтобы игнорировать их при обработке текущего сигнала (используя signal()
).
Наконец , пожалуйста прочитайте man страниц!
Edit:
Поскольку автор говорит, что он их читает, я рекомендую использовать команду apropos для поиска таких труднодоступных функций. Например,
$ apropos "blocked signals"
дает вам около 5 ударов, 1 из которых sigprocmask
Ура!