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).