Provided by: manpages-ru-dev_4.19.0-7_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 ⟨https://www.gnu.org/licenses/gpl-3.0.html⟩ или более позднюю, чтобы узнать об условиях авторского права. Мы не несем НИКАКОЙ ОТВЕТСТВЕННОСТИ. Если вы обнаружите ошибки в переводе этой страницы руководства, пожалуйста, отправьте электронное письмо на ⟨man-pages-ru-talks@lists.sourceforge.net⟩.