signal.h
signal.h — заголовочный файл, определенный в стандартной библиотеке языка Си, для указания того, как программа обрабатывает сигналы во время её выполнения. Сигнал может быть как синхронным с помощью вызова raise()
, так и асинхронным.
Каждая реализация определяет какой сигнал что генерирует и определяет их генерацию.
Эта часть библиотеки используется для перехвата сигналов — назначения обработчика определённого сигнала.
Обработчик сигнала может вызывать только следующие функции: _exit()
, _Exit()
, abort()
, raise()
(только если обработчик не вызван функциями abort или raise). Вызов прочих библиотечных функций приводит к неопределённому поведению, хотя отдельными реализациями такие вызовы могут быть разрешены, например в posix есть список async-signal-safe функций.
Типы данныхПравить
Стандарт объявляет тип данных sig_atomic_t
, доступ к которому является атомарным, даже при наличии асинхронных прерываний.[1]
МакросыПравить
Стандарт объявляет макросы SIG_DFL
, SIG_ERR
, SIG_IGN
, которые используются как аргументы и возвращаемое значение для функции signal()
.[1] Макрос SIG_DFL используется для установки поведения по умолчанию для выбранного сигнала, SIG_IGN — для игнорирования сигнала, а SIG_ERR — как возвращаемое значение, свидетельствующее об ошибке.
Кроме того, стандарт определяет следующие типы сигналов:[1]
Константа | Значение |
---|---|
SIGINT | Получение интерактивного сигнала |
SIGILL | Недопустимая инструкция |
SIGABRT | Ненормальное завершение программы, которое может быть вызвано abort()
|
SIGFPE | Ошибочная арифметическая операция, такая как деление на ноль или переполнение |
SIGSEGV | Ошибочное обращение к объекту в памяти |
SIGTERM | Запрос на прекращение выполнения |
и разрешает другие, зависящие от платформы. При запуске программы часть сигналов может игнорироваться, для другой части определяется поведение по умолчанию.
ФункцииПравить
Стандарт объявляет следующие функции:
#include <signal.h>
void (*signal(int sig, void (*func)(int)))(int);
int raise(int sig);
Функция signal
устанавливает обработчик func
для сигнала sig
. В качестве аргумента func
может принимать SIG_IGN
и SIG_DFL
. В случае успеха функция возвращает старый обработчик сигнала, в противном случае — SIG_ERR
.
Если обработчик возвращает управление при типе сигнала SIGILL
, SIGFPE
, SIGSEGV
или иных, связанных с ошибками выполнения, поведение программы не определено. Кроме того, обработчик если был вызван не с помощью abort или raise, может изменять переменные только типа volatile sig_atomic_t
.
Функция raise
генерирует сигнал sig
.[1]
МетодыПравить
int raise(int sig)
. Искусственно вызывает сигнал.psignal(int sig, const char *s)
, выводит в stderr строку, содержащую номер сигнала. Применяется в 4.3BSD, Solaris и Linux, но не указан в POSIX, стандартной библиотеке Си и SUS. На тех же системах string.h содержит нестандартныйstrsignal(int sig)
, который работает аналогично strerror.void* signal(int sig, void (*func)(int))
назначает действие, предпринимаемое при получении программой сигналаsig
. Если значение func равно SIG_DFL, то происходит обработка по умолчанию для указанного сигнала. Если значение func равно SIG_IGN, то сигнал игнорируется. В остальных случаях func указывает на вызываемую функцию обработчик сигнала при получении сигнала. Функция func может завершиться выполнением операции возврата или вызовом функций самозавершения, выхода или перехода.
Члены-константыПравить
Константа | Значение | Стандарты | |
---|---|---|---|
SIGHUP | Отбой | POSIX | |
SIGINT | Прерывание | ANSI | |
SIGQUIT | Выход | POSIX | |
SIGILL | Недопустимая инструкция | ANSI | |
SIGABRT | Самоостановка | ANSI | |
SIGTRAP | Перехват события | POSIX | |
SIGIOT | Перехват ввода-вывода | 4.2 BSD | |
SIGEMT | Перехват эмуляции | 4.2 BSD | |
SIGFPE | Исключение с плавающей запятой | ANSI | |
SIGKILL | Неперехватываемый сигнал завершения | POSIX | |
SIGBUS | Ошибка шины | 4.2 BSD | |
SIGSEGV | Нарушение сегментации | ANSI | |
SIGSYS | Неправильный аргумент в системный вызов | 4.2 BSD | |
SIGPIPE | Нарушение канала | POSIX | |
SIGALRM | Истечение времени | POSIX | |
SIGTERM | Завершение | ANSI | |
SIGUSR1 | Пользовательский сигнал 1 | POSIX | |
SIGUSR2 | Пользовательский сигнал 2 | POSIX | |
SIGCHLD | Изменение статуса дочернего процесса | POSIX | |
SIGCLD | Аналогично SIGCHLD | System V | |
SIGPWR | Перезапуск после проблемы с питанием | System V | |
SIGXCPU | Ограничение процессорного времени | POSIX |
ПримечанияПравить
- ↑ 1 2 3 4 ISO/IEC 9899:TC3 7.14 (неопр.). Дата обращения: 29 декабря 2011. Архивировано 11 января 2018 года.
СсылкиПравить
signal.h
— основные определения, The Single UNIX® Specification, выпуск 7 от The Open Group (англ.)- Руководство от dinkumware по signal.h
- Руководство от XGC по signal.h