Главная » 2017 » Ноябрь » 21 » man 2 rt_sigsuspend
01:36
man 2 rt_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) (иначе возникает

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