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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы
       узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ.

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