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

ИМЯ

sigpause - автоматически разблокирует сигналы и ждёт прерывания

ОБЗОР

#include <signal.h>
int sigpause(int sigmask);  /* BSD (но см. ЗАМЕЧАНИЯ) */
int sigpause(int sig);      /* System V / UNIX 95 */

ОПИСАНИЕ

Не используйте эту функцию. Вместо неё используйте sigsuspend(2).

Функция sigpause() предназначена для ожидания какого-нибудь сигнала. Она изменяет сигнальную маску процесса (набор блокируемых сигналов) и ждёт появления сигнала. При прибытии сигнала первоначальная сигнальная маска восстанавливается.

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

Если sigpause() возвращает выполнение, то это означает, что она была прервана сигналом и возвращается значение -1, а errno присваивается значение EINTR.

АТРИБУТЫ

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

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

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

Версия sigpause() из System V стандартизована в POSIX.1-2001. Также она есть в POSIX.1-2008, но помечена как устаревшая.

ЗАМЕЧАНИЯ

История

Классическая BSD-версия этой функции появилась в 4.2BSD. Она изменяет сигнальную маску процесса на sigmask. В UNIX 95 стандартизована несовместимая с System V версия этой функции, которая удаляет сигнальной маски процесса только указанный сигнал sig. Проблемная ситуация двух несовместимых функций с одним именем была исправлена функцией sigsuspend(2), которая ожидает аргумент с типом sigset_t * (вместо int).

Замечания, касающиеся Linux

В Linux эта процедура является системным вызовом только на архитектуре Sparc (sparc64).

В glibc используется версия BSD, если определён макрос тестирования свойств _BSD_SOURCE и отсутствуют _POSIX_SOURCE, _POSIX_C_SOURCE, _XOPEN_SOURCE, _GNU_SOURCE или _SVID_SOURCE. В противном случае используется версия System V и для получения объявления должен быть определен следующие макросы тестирования свойств:

  • Начиная с glibc 2.26: _XOPEN_SOURCE >= 500
  • glibc 2.25 и старее: _XOPEN_SOURCE

Начиная с glibc 2.19, в <signal.h> представлена только версия System V; в приложениях, которые использовали BSD-версию sigpause(), нужно заменить его на sigsuspend(2).

СМОТРИТЕ ТАКЖЕ

kill(2), sigaction(2), sigprocmask(2), sigsuspend(2), sigblock(3), sigvec(3), feature_test_macros(7)

2017-09-15 Linux