Provided by: manpages-ru-dev_4.21.0-2_all bug

ИМЯ

       sigsuspend, rt_sigsuspend - ожидание сигнала

LIBRARY

       Standard C library (libc, -lc)

СИНТАКСИС

       #include <signal.h>

       int sigsuspend(const sigset_t *mask);

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

       sigsuspend():
           _POSIX_C_SOURCE

ОПИСАНИЕ

       Вызов  sigsuspend()  временно  заменяет  маску сигналов вызывающей нити маской, указанной в mask, и затем
       приостанавливает нить до тех пор, пока не поступит сигнал, для которого запустится обработчик сигнала или
       это приведёт к завершению процесса.

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

       Сигналы SIGKILL и SIGSTOP невозможно заблокировать; указание этих этих сигналов в mask не влияет на маску
       сигналов нити.

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

       Вызов sigsuspend() всегда возвращает -1; errno присваивается номер ошибки (обычно EINTR).

ОШИБКИ

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

       EINTR  Вызов был прерван по сигналу; смотрите signal(7).

СТАНДАРТЫ

       POSIX.1-2001, POSIX.1-2008.

ЗАМЕЧАНИЯ

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

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

   Отличия между библиотекой C и ядром
       Первоначально,  системный  вызов  Linux  назывался sigsuspend(). Однако, с добавлением сигналов реального
       времени в Linux 2.2, 32-битный аргумент sigset_t неизменяемого  размера,  поддерживаемый  этим  системным
       вызовом,  не мог больше использоваться. В результате был добавлен новый системный вызов rt_sigsuspend() с
       увеличенным типом sigset_t. У нового системного вызова появился второй  аргумент,  size_t  sigsetsize,  в
       котором  указывается  размер  (в байтах) набора сигналов mask. В настоящее время значение этого аргумента
       должно быть равно sizeof(sigset_t) (иначе возникает ошибка EINVAL). Обёрточная функция glibc sigsuspend()
       скрывает это и вызывает rt_sigsuspend(), если он есть в ядре.

СМ. ТАКЖЕ

       kill(2), pause(2), sigaction(2), signal(2),  sigprocmask(2),  sigwaitinfo(2),  sigsetops(3),  sigwait(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>

       Этот перевод является бесплатной документацией; прочитайте Стандартную общественную лицензию GNU версии 3
       или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

       Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное  письмо
       на man-pages-ru-talks@lists.sourceforge.net.

Linux man-pages 6.03                           30 октября 2022 г.                                  sigsuspend(2)