Главная » 2017 » Ноябрь » 24 » man 2 sigsuspend
05:29
man 2 sigsuspend

SEO sprint - Всё для максимальной раскрутки!





ИМЯ


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



ОБЗОР


#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(), если он есть в ядре.



Категория: (2) Системные вызовы ядра (функции языка Си) | Просмотров: 473 | Добавил: Администратор | Рейтинг: 0.0/0
Всего комментариев: 0
avatar