Маска сигналов - это атрибут процесса, список сигналов, которые заблокированы.sigprocmask
извлекает и / или обновляет этот атрибут процесса.
Набор сигналов - это тип данных, который содержит список номеров сигналов.sigaddset
и sigdelset
используются для изменения объекта, содержащего эти данные.
Если вы хотите установить или получить маску сигналов процесса, системный вызов sigprocmask()
принимает параметр, тип которого sigset_t*
для хранения указателя на этот список.
Это аналогично связи между идентификаторами процесса и pid_t
.
Так что если вы хотите изменить маску сигналов процесса, вы можетевыполните следующие действия:
- Вызовите
sigprocmask()
с нулевым set
и ненулевым oset
параметром, чтобы получить маску текущего процесса в переменной sigset_t
. - Вызовите
sigaddset()
и / или sigdelset()
, чтобы добавить и удалить сигналы из этой переменной. - Вызовите
sigprocmask()
с how = SIG_SETMASK
и set
, содержащими обновленный набор сигналов.
Если вы просто хотите добавить или удалить сигналы из маски, но не оба, вы можете использовать операции SIG_BLOCK
и SIG_UNBLOCK
, чтобы сделать это за один вызов sigprocmask
.Просто создайте набор сигналов, содержащий сигналы, которые вы хотите добавить или удалить, и они будут объединены с существующей маской.