Provided by: manpages-ru-dev_4.27.0-1_all bug

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

       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 или
       более поздней) в отношении авторского права, но БЕЗ КАКИХ-ЛИБО ГАРАНТИЙ.

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

Справочные страницы Linux 6.9.1                   2 мая 2024 г.                                   sigprocmask(2)