Scroll to navigation

SIGSUSPEND(2) Руководство программиста Linux 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.

ОШИБКИ

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

СООТВЕТСТВИЕ СТАНДАРТАМ

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)

2008-08-29 Linux