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

ИМЯ
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)