Other Alias
rt_sigsuspendОБЗОР
#include <signal.h>int sigsuspend(const sigset_t *mask);
Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):
sigsuspend(): _POSIX_C_SOURCE >= 1 || _XOPEN_SOURCE || _POSIX_SOURCE
ОПИСАНИЕ
Вызов sigsuspend() временно заменяет маску сигналов вызывающего процесса маской, указанной в mask, и затем приостанавливает процесс до тех пор, пока не поступит сигнал, для которого запустится обработчик сигнала или это приведёт к завершению процесса.Если по сигналу процесс завершается, то вызов sigsuspend() не возвращает управление обратно в программу. Если сигнал пойман, то возврат из sigsuspend() произойдёт после завершения выполнения обработчика, и маска сигналов восстановится в значение, которое было до вызова sigsuspend().
Сигналы SIGKILL и SIGSTOP невозможно заблокировать; указание этих этих сигналов в mask не влияет на маску сигналов процесса.
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
Вызов sigsuspend() всегда возвращает -1; errno присваивается номер ошибки (обычно EINTR).ОШИБКИ
- EFAULT
- Аргумент mask указывает на память в недопустимой части адресного пространства процесса.
- EINTR
- Вызов был прерван по сигналу; смотрите signal(7).
СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001, POSIX.1-2008.ЗАМЕЧАНИЯ
Обычно, sigsuspend() используется вместе с sigprocmask(2), чтобы предотвратить доставку сигнала при выполнении критического участка кода. Сначала вызывающий блокирует сигналы с помощью sigprocmask(2). Когда критический участок выполнен, вызывающий начинает ждать сигналов с помощью вызова sigsuspend(), указав маску, значение которой было возвращено вызовом sigprocmask(2) (в аргументе oldset).
Подробная информация о работе с наборами сигналов есть на странице sigsetops(3).