Изменить маску сигналов потока
#include <signal.h>int sigprocmask( int how,const sigset_t *set,sigset_t *oset );
NULL
или указатель на объект sigset_t
, который определяет сигналы, которые необходимо изменить в маске сигналов потока. Если этот аргумент равен NULL
, аргумент how игнорируется.NULL
или указатель на объект sigset_t
, который функция устанавливает для указания текущей маски сигналов потока.libc
Функция sigprocmask() используется для проверки и/или изменения маски сигналов для вызывающего потока. Если значение set не равно NULL
, оно указывает на набор сигналов, которые будут использоваться для изменения текущей заблокированной маске.
Аргумент set не изменяется. Результирующая маска сохраняется в таблице процессов вызывающего потока. Если поступает маскированный сигнал, он становится в очередь ожидания, но не влияет на выполнение процесса. Можно проверить ожидающие сигналы, вызвав sigpending(). Если ожидающий сигнал размаскируется, то он обрабатывается немедленно, прежде чем эта функция завершится.
Когда вызывается обработчик сигнала, соответствующий сигнал автоматически маскируется перед его вызовом. Если обработчик завершается без ошибок, операционная система атомарно восстанавливает маску сигналов, имевшуюся непосредственно перед вызовом обработчика. Изменения, сделанные с помощью sigprocmask() в обработчике, отменяются.
Функция sigaction() позволяет указать любую маску, которая применяется до вызова обработчика. Это позволяет упростить разработку нескольких обработчиков сигналов.
![]() | Для обеспечения лучшей переносимости кода следует использовать pthread_sigmask() в многопоточных приложениях. |
SIGKILL
или SIGSTOP
в значение, отличное от SIG_DFL
. #include <stdio.h>#include <stdlib.h>#include <signal.h>#include <unistd.h>int main( void ){sigset_t set, oset, pset;sigemptyset( &set );sigaddset( &set, SIGINT );sigprocmask( SIG_BLOCK, &set, &oset );printf( "Old set was %8.8ld.\n", oset );sigpending( &pset );printf( "Pending set is %8.8ld.\n", pset );kill( getpid(), SIGINT );sigpending( &pset );printf( "Pending set is %8.8ld.\n", pset );sigprocmask( SIG_UNBLOCK, &set, &oset );/* The program terminates with a SIGINT */return (EXIT_SUCCESS);}
POSIX 1003.1 Extension to the ISO C standard
kill(), pthread_sigmask(), raise(), sigaction(), sigaddset(), sigdelset(), sigemptyset(), sigfillset(), sigismember(), signal(), SignalProcmask(), sigpending()
Предыдущий раздел: Описание API системной библиотеки