Man page - sigprocmask(2)

Packages contains this manual

Available languages:

en fr ja ru ro

Manual

sigprocmask

НАИМЕНОВАНИЕ
БИБЛИОТЕКА
ОБЗОР
ОПИСАНИЕ
ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ
ОШИБКИ
ВЕРСИИ
Отличия между библиотекой C и ядром
СТАНДАРТЫ
ИСТОРИЯ
ПРИМЕЧАНИЯ
СМОТРИТЕ ТАКЖЕ
ПЕРЕВОД

НАИМЕНОВАНИЕ

sigprocmask, rt_sigprocmask - проверка и изменение блокировки сигналов

БИБЛИОТЕКА

Стандартная библиотека языка C ( libc , -lc )

ОБЗОР

#include <signal.h>

/* Prototype for the glibc wrapper function */
int sigprocmask(int
how , const sigset_t *_Nullable restrict set ,
sigset_t *_Nullable restrict
oldset );

#include <signal.h> /* Definition of SIG_* constants */
#include <sys/syscall.h>
/* Definition of SYS_* constants */
#include <unistd.h>

/* Prototype for the underlying system call */
int syscall(SYS_rt_sigprocmask, int
how ,
const kernel_sigset_t *_Nullable
set ,
kernel_sigset_t *_Nullable
oldset ,
size_t
sigsetsize );

/* Prototype for the legacy system call */
[[deprecated]] int syscall(SYS_sigprocmask, int
how ,
const old_kernel_sigset_t *_Nullable
set ,
old_kernel_sigset_t *_Nullable
oldset );

Требования макроса тестирования свойств для glibc (см. feature_test_macros (7)):

sigprocmask ():
_POSIX_C_SOURCE

ОПИСАНИЕ

Вызов sigprocmask () используется для выборки и/или изменения маски сигналов вызывающей нити. Маска сигналов представляет собой набор сигналов, чья доставка в настоящее время заблокирована вызывающим (подробнее об этом смотрите также в signal (7)).

Работа вызова зависит от значения how :
SIG_BLOCK

Набор блокируемых сигналов — объединение текущего набора и аргумента set .

SIG_UNBLOCK

Сигналы в set удаляются из списка блокируемых сигналов. Допускается разблокировать незаблокированные сигналы.

SIG_SETMASK

Набор блокируемых сигналов приравнивается к аргументу set .

Если значение oldset не равно NULL, то предыдущее значение маски сигналов записывается в oldset .

Если значение set равно NULL, то маска сигналов не изменяется (т.е., значение how игнорируется), но текущее значение маски сигналов всё же возвращается в oldset (если его значение не равно NULL).

Функции для изменения и получения переменных с типом sigset_t («наборы сигналов») описаны в sigsetops (3).

Использование sigprocmask () в многонитевых процессах не определено; смотрите pthread_sigmask (3).

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

sigprocmask () returns 0 on success. On failure, -1 is returned and errno is set to indicate the error.

ОШИБКИ

EFAULT

Аргумент set или oldset указывает за пределы выделенного адресного пространства процесса.

EINVAL

Значение how некорректно или ядро не поддерживает размер, переданный в sigsetsize .

ВЕРСИИ

Отличия между библиотекой C и ядром

Определение ядра sigset_t отличается по размеру от используемого в библиотеке C. В данной справочной странице оно упоминается как kernel_sigset_t (хотя в исходном коде ядра оно называется sigset_t ).

Обёрточная функция glibc для sigprocmask () просто игнорирует попытки блокирования двух сигналов реального времени, которые используются внутри реализации NPTL. Подробности смотрите в nptl (7).

Изначально, системный вызов Linux назывался sigprocmask (). Однако из-за добавления сигналов реального времени в Linux 2.2, 32-битный тип sigset_t (который называется old_kernel_sigset_t в этой справочной странице) постоянного размера, поддерживаемый этим системным вызовом, перестал подходить для этой цели. В связи с этим был добавлен новый системный вызов rt_sigprocmask (), поддерживающий увеличенный тип sigset_t (который называется kernel_sigset_t в этой справочной странице). У нового системного вызова есть четвёртый аргумент, size_t sigsetsize , которым задаётся размер набора сигналов (в байтах) в set и oldset . В настоящее время этот аргумент должен задаваться постоянным определяемым архитектурой значением (равен sizeof(kernel_sigset_t) ).

Обёрточная функция glibc sigprocmask () скрывает эти детали от нас, вызывая rt_sigprocmask (), если это необходимо ядру.

СТАНДАРТЫ

POSIX.1-2008.

ИСТОРИЯ

POSIX.1-2001.

ПРИМЕЧАНИЯ

Невозможно заблокировать SIGKILL или SIGSTOP . Попытка выполнить это просто игнорируется.

Каждая нить процесса имеют свою маску сигналов.

Потомок, создаваемый с помощью fork (2), наследует копию родительской маски сигналов; маска сигналов сохраняется при вызове execve (2).

Если генерируется сигнал SIGBUS , SIGFPE , SIGILL или SIGSEGV , а он заблокирован, то результат не определён, если сигнал был сгенерирован не из kill (3), sigqueue (3) или raise (3).

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

Заметим, что разрешается (хотя не очень полезно) передавать в set и oldset значение NULL.

СМОТРИТЕ ТАКЖЕ

kill (2), pause (2), sigaction (2), signal (2), sigpending (2), sigsuspend (2), pthread_sigmask (3), sigqueue (3), sigsetops (3), signal (7)

ПЕРЕВОД

Русский перевод этой страницы руководства разработал(и) Alexander Golubev <fatzer2@gmail.com>, Azamat Hackimov <azamat.hackimov@gmail.com>, Hotellook, Nikita <zxcvbnm3230@mail.ru>, Spiros Georgaras <sng@hellug.gr>, Vladislav <ivladislavefimov@gmail.com>, Yuri Kozlov <yuray@komyakino.ru>, Иван Павлов <pavia00@gmail.com> и Kirill Rekhov <krekhov.dev@gmail.com>

Этот перевод является свободной программной документацией; он распространяется на условиях общедоступной лицензии GNU (GNU General Public License - GPL, https://www.gnu.org/licenses/gpl-3.0.html версии 3 или более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

Если вы обнаружите какие-либо ошибки в переводе этой страницы руководства, пожалуйста, сообщите об этом разработчику(ам) по его(их) адресу(ам) электронной почты или по адресу списка рассылки русских переводчиков .