SIGSUSPEND(2)

ИМЯ
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, обычно с ошибкой EINTR.

ОШИБКИ

EFAULT
    Аргумент mask указывает на память в недопустимой части адресного пространства процесса.

EINTR
    Вызов был прерван сигналом.

СООТВЕТСТВИЕ СТАНДАРТАМ
POSIX.1-2001.

ЗАМЕЧАНИЯ

Обычно, sigsuspend() используется вместе с sigprocmask(2), чтобы предотвратить доставку сигнала при выполнении критического участка кода. Сначала вызывающий блокирует сигналы с помощью sigprocmask(2). Когда критический участок выполнен, вызывающий начинает ждать сигналов с помощью вызова sigsuspend(), указав маску, значение которой было возвращено вызовом sigprocmask(2) (в аргументе oldset).

Подробная информация о работе с наборами сигналов есть на странице sigsetops(3).

СМОТРИТЕ ТАКЖЕ
kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), sigwaitinfo(2), sigsetops(3), sigwait(3), signal(7)