Provided by: manpages-ru-dev_4.26.0-1_all 

НАИМЕНОВАНИЕ
sigsuspend, rt_sigsuspend - ожидание сигнала
БИБЛИОТЕКА
Стандартная библиотека языка C (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-2008.
ИСТОРИЯ
POSIX.1-2001.
Отличия между библиотекой 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(), если он есть в ядре.
ПРИМЕЧАНИЯ
Обычно, sigsuspend() используется вместе с sigprocmask(2), чтобы предотвратить доставку сигнала при
выполнении критического участка кода. Сначала вызывающий блокирует сигналы с помощью sigprocmask(2).
Когда критический участок выполнен, вызывающий начинает ждать сигналов с помощью вызова sigsuspend(),
указав маску, значение которой было возвращено вызовом sigprocmask(2) (в аргументе oldset).
Подробная информация о работе с наборами сигналов есть на странице sigsetops(3).
СМОТРИТЕ ТАКЖЕ
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> и 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 г. sigsuspend(2)