Структура siginfo_t
определена в файле и включает следующие поля:
int si_signo |
Номер сигнала |
int si_errno |
Номер ошибки |
int si_code |
Причина отправления сигнала |
В поле si_signo
хранится номер сигнала. Поле si_code
имеет следующий смысл: если его значение меньше или равно нулю, значит сигнал был отправлен прикладным процессом, в этом случае структура siginfo_t
содержит также следующие поля:
pid_t si_pid |
Идентификатор процесса PID |
uid_t si_uid |
Идентификатор пользователя UID |
которые адресуют процесс, пославший сигнал; если значение si_code
больше нуля, то оно указывает на причину отправления сигнала. Список возможных значений si_code
для некоторых сигналов, соответствующих полю si_signo
, приведен в табл. 2.19
Таблица 2.19. Значения поля si_code структуры siginfo_t для некоторых сигналов
Значение поля si_signo |
Значение поля si_code |
Описание |
SIGILL |
Попытка выполнения недопустимой инструкции |
ILL_ILLOPC |
Недопустимый код операции (opcode) |
ILL_ILLOPN |
Недопустимый операнд |
ILL_ADR |
Недопустимый режим адресации |
ILL_ILLTRP |
Недопустимая ловушка (trap) |
ILL_PRVOPC |
Привилегированный код операции |
ILL_PRVREG |
Привилегированный регистр |
ILL_COPROC |
Ошибка сопроцессора |
ILL_BADSTK |
Ошибка внутреннего стека |
SIGFPE |
Особая ситуация операции с плавающей точкой |
FPE_INTDIV |
Целочисленное деление на ноль |
FPE_INTOVF |
Целочисленное переполнение |
FPE_FLTDIV |
Деление на ноль с плавающей точкой |
FPE_FLTOVF |
Переполнение с плавающей точкой |
FPE_FLTUND |
Потеря точности с плавающей точкой (underflow) |
FPE_FLTRES |
Неоднозначный результат операции с плавающей точкой |
FPE_FLTINV |
Недопустимая операция с плавающей точкой |
FPE_FLTSUB |
Индекс вне диапазона |
SIGSEGV |
Нарушение сегментации |
SEGV_MAPPER |
Адрес не отображается на объект |
SEGV_ACCERR |
Недостаточно прав на отображаемый объект |
SIGBUS |
Ошибка адресации |
BUS_ADRALN |
Недопустимое выравнивание адреса |
BUS_ADRERR |
Несуществующий физический адрес |
BUS_OBJERR |
Аппаратная ошибка, связанная с объектом |
SIGTRAP |
Ловушка |
TRAP_BRKPT |
Процессом достигнута точка останова |
TRAP_TRACE |
Ловушка трассирования процесса |
SIGCHLD |
Завершение выполнения дочернего процесса |
CLD_EXITED |
Дочерний процесс завершил выполнение |
CLD_KILLED |
Дочерний процесс был "убит" |
CLD_DUMPED |
Ненормальное завершение дочернего процесса |
CLD_TRAPPED |
Трассируемый дочерний процесс находится в ловушке |
CLD_STOPPED |
Выполнение дочернего процесса было остановлено |
CLD_CONTINUED |
Выполнение остановленного дочернего процесса было продолжено |
SIGPOLL |
Событие на опрашиваемом устройстве |
POLL_IN |
Поступили данные для ввода |
POLL_OUT |
Свободны буферы данных |
POLL_MSG |
Сообщение ожидает ввода |
POLL_ERR |
Ошибка ввода/вывода |
POLL_PRI |
Высокоприоритетные данные ожидают ввода |
POLL_HUP |
Устройство отключено |
Уже отмечалось, что при получении сигнала от пользовательского процесса структура siginfo_t
содержит дополнительные поля (табл. 2.20).
Таблица 2.20. Дополнительные поля структуры siginfo_t
Значение поля si_signo |
Дополнительные поля |
Значение |
SIGILL SIGFPE |
caddr_t si_addr |
Адрес недопустимой инструкции |
SIGSEGV SIGBUS |
caddr_t si_addr |
Адрес недопустимой области памяти |
SIGCHLD |
pid_t si_pid |
Идентификатор дочернего процесса |
int si_status |
Код возврата сигнала |
SIGPOLL |
long si_band |
Ошибка канала (для модулей STREAMS) |
Установить маску сигналов или получить текущую маску можно с помощью функции sigprocmask(2) :
#include
int sigprocmask(int how, sigset_t *set, sigset_t *oset);
Маска сигналов изменяется в соответствии с аргументом how
, который может принимать следующие значения:
Читать дальше