Scroll to navigation

SIGSET(3) Руководство программиста Linux SIGSET(3)

ИМЯ

sigset, sighold, sigrelse, sigignore - программный интерфейс сигналов System V

СИНТАКСИС

#include <signal.h>

typedef void (*sighandler_t)(int);

sighandler_t sigset(int sig, sighandler_t disp);

int sighold(int sig);

int sigrelse(int sig);

int sigignore(int sig);

Требования макроса тестирования свойств для glibc (см. feature_test_macros(7)):

sigset(), sighold(), sigrelse(), sigignore():

_XOPEN_SOURCE >= 500

ОПИСАНИЕ

Данные функции предоставляются glibc для совместимости с программами, в которых используются старый программный интерфейс сигналов System V. Данный программный интерфейс устарел: в новых приложениях нужно использовать программный интерфейс сигналов POSIX (sigaction(2), sigprocmask(2) и т.п.).

Функция sigset() изменяет обработку сигнала sig. В аргументе disp может быть указан адрес функции обработчика сигнала или одна из следующих констант:

Сбросить обработку sig в значение по умолчанию.
Игнорировать sig.
Добавить sig в маску сигналов процесса, но оставить обработку sig неизменной.

Если в disp задан адрес обработчика сигналов, то при его выполнении sig добавляется в маску сигналов процесса.

Если в disp было указано значение отличное от SIG_HOLD, то sig удаляется из маски сигналов процесса.

Обработку сигналов SIGKILL и SIGSTOP невозможно изменить.

Функция sighold() добавляет sig в маску сигналов вызвавшего процесса.

Функция sigrelse() удаляет sig из маски сигналов вызвавшего процесса.

Функция sigignore() устанавливает обработку sig равной SIG_IGN.

ВОЗВРАЩАЕМОЕ ЗНАЧЕНИЕ

При успешном выполнении sigset() возвращает SIG_HOLD, если sig был заблокирован до вызова, или предыдущий обработчик сигнала, если блокировки не было. При ошибке sigset() возвращает -1, а errno записывает номер ошибки (но смотрите раздел ДЕФЕКТЫ далее).

При успешном выполнении функции sighold(), sigrelse() и sigignore() возвращают 0; при ошибке возвращается -1, а в errno — номер ошибки.

ОШИБКИ

Для функции sigset() смотрите раздел ОШИБКИ в sigaction(2) и sigprocmask(2).

Для функции sighold() и sigrelse() смотрите раздел ОШИБКИ в sigprocmask(2).

Для функции sigignore() смотрите раздел ОШИБКИ в sigaction(2).

АТРИБУТЫ

Описание терминов данного раздела смотрите в attributes(7).

Интерфейс Атрибут Значение
sigset(), sighold(), sigrelse(), sigignore() Безвредность в нитях MT-Safe

СООТВЕТСТВИЕ СТАНДАРТАМ

Существует в SVr4, POSIX.1-2001, POSIX.1-2008. Эти функции устарели: не используйте их в новых программах. В POSIX.1-2008 функции sighold(), sigignore(), sigpause(3), sigrelse() и sigset() помечены как устаревшие, вместо них рекомендуется использовать sigaction(2), sigprocmask(2), pthread_sigmask(3) и sigsuspend(2).

ЗАМЕЧАНИЯ

Данные функции впервые появились в glibc 2.1.

Тип sighandler_t является расширением GNU; в этой странице он используется только для более понятного описания прототипа sigset().

Функция sigset() предоставляет семантику надёжной обработки сигналов (как при вызове sigaction(2) с значением sa_mask равным 0).

В System V, функция signal() предоставляет ненадёжную семантику (как при вызове sigaction(2) со значением sa_mask равным SA_RESETHAND | SA_NODEFER). В BSD, signal() предоставляет надёжную семантику. В POSIX.1-2001 эти аспекты signal() не определены. Подробности смотрите в signal(2).

Для ожидания сигналов в BSD и System V предоставляется функция sigpause(3), но в других системах она описана с другим аргументом. Подробности смотрите в sigpause(3).

ДЕФЕКТЫ

В версиях glibc до 2.2, sigset() не блокирует sig, если в disp было указано значение, отличное от SIG_HOLD.

В версиях glibc до 2.5, sigset() в двух случаях некорректно возвращает предыдущий обработчик сигнала. Во-первых, если disp равно SIG_HOLD, то при успешном выполнении sigset() всегда возвращается SIG_HOLD. Вместо этого должен возвращаться предыдущий обработчик сигнала (если сигнал не заблокирован, в этом случае должно возвращаться SIG_HOLD). Во-вторых, если сигнал в данный момент заблокирован, то возвращаемое значение успешного выполнения sigset() должно быть равно SIG_HOLD. Вместо этого возвращается предыдущий обработчик сигнала. Эти проблемы были устранены начиная с glibc 2.5.

СМ. ТАКЖЕ

kill(2), pause(2), sigaction(2), signal(2), sigprocmask(2), raise(3), sigpause(3), sigvec(3), signal(7)

ЗАМЕЧАНИЯ

Эта страница является частью проекта Linux man-pages версии 5.10. Описание проекта, информацию об ошибках и последнюю версию этой страницы можно найти по адресу https://www.kernel.org/doc/man-pages/.

ПЕРЕВОД

Русский перевод этой страницы руководства был сделан 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.

13 августа 2020 г. Linux