siginfo_t

Информация о сигнале

Прототип:

#include <sys/siginfo.h>
typedef struct _siginfo {
int si_signo;
int si_code; /* if SI_NOINFO, only si_signo is valid */
int si_errno;
union {
int __pad[7];
struct {
pid_t __pid;
union {
struct {
uid_t __uid;
union sigval __value;
} __kill; /* si_code <= 0 SI_FROMUSER */
struct {
_CSTD clock_t __utime;
int __status; /* CLD_EXITED status, else signo */
_CSTD clock_t __stime;
} __chld; /* si_signo=SIGCHLD si_code=CLD_* */
} __pdata;
} __proc;
struct {
int __fltno;
void *__fltip;
void *__addr;
int __bdslot;
} __fault; /* si_signo=SIGSEGV,ILL,FPE,TRAP,BUS */
} __data;
} siginfo_t;
#define si_pid __data.__proc.__pid
#define si_value __data.__proc.__pdata.__kill.__value
#define si_uid __data.__proc.__pdata.__kill.__uid
#define si_status __data.__proc.__pdata.__chld.__status
#define si_utime __data.__proc.__pdata.__chld.__utime
#define si_stime __data.__proc.__pdata.__chld.__stime
#define si_fltno __data.__fault.__fltno
#define si_trapno si_fltno
#define si_addr __data.__fault.__addr
#define si_fltip __data.__fault.__fltip
#define si_bdslot __data.__fault.__bdslot

Описание:

Тип позволяет получать информацию о сигнале. Структура включает следующие поля:

si_signo
Номер сигнала.
si_code
Код сигнала, ограниченный знаковым 8-битным значением, выглядит следующим образом:
Значение Описание
-128 <= si_code <= 0 Пользовательские значения; можно предоставить их при вызове SignalKill*()
0 < si_code <= 127 Системные значения, генерируемые ядром
ЗОСРВ «Нейтрино» определяет макросы, которые указывают, попадает ли значение si_code в указанные выше диапазоны:
SI_FROMUSER()
SI_FROMKERNEL()
POSIX определяет следующие значения, не все из которых использует ЗОСРВ «Нейтрино»:
Сигнал Код Причина
SIGILL ILL_ILLOPC
ILL_ILLOPN
ILL_ILLADR
ILL_ILLTRP
ILL_PRVOPC
ILL_PRVREG
ILL_COPROC
ILL_BADSTK
Некорректный код операции
Некорректный операнд (в настоящее время не используется)
Некорректный режим адресации (в настоящее время не используется)
Некорректная функция перехвата (trap) (в настоящее время не используется)
Привилегированный код операции; инструкция требует привилегированного режима процессора
Привилегированный регистр (в настоящее время не используется)
Ошибка инструкции сопроцессора
Внутренняя ошибка стека
SIGFPE FPE_INTDIV
FPE_INTOVF
FPE_FLTDIV
FPE_FLTOVF
FPE_FLTUND
FPE_FLTRES
FPE_FLTINV
FPE_FLTSUB
Целочисленное деление на ноль
Целочисленное переполнение
Деление на ноль с плавающей запятой
Переполнение плавающей точки
Потеря значимости с плавающей запятой
Неточный результат с плавающей запятой
Недопустимая операция с плавающей точкой
Подстрочный индекс вне допустимого диапазона (в настоящее время не используется)
SIGSEGV SEGV_MAPERR
SEGV_ACCERR
Адрес не сопоставлен с объектом
Отображение запрещает попытку доступа
SIGBUS BUS_ADRALN
BUS_ADRERR
BUS_OBJERR
Неверное выравнивание адреса
Доступ к несуществующей области памяти
Аппаратная ошибка объекта
SIGTRAP TRAP_BRKPT
TRAP_TRACE
Функция перехвата (trap) точки останова процесса
Функция перехвата (trap) трассировки процесса
SIGCHLD CLD_EXITED
CLD_KILLED
CLD_DUMPED
CLD_TRAPPED
CLD_STOPPED
CLD_CONTINUED
Дочерний процесс заврешился
Дочерний процесс аварийно завершил работу и не создал core-файл
Дочерний процесс аварийно завершил работу и создал core-файл
Отслеживаемый дочерний процесс попал в функцию перехвата (trap)
Дочерний процесс приостановился
Приостановившийся дочерний процесс продолжил исполнение
SIGPOLL POLL_IN
POLL_OUT
POLL_MSG
POLL_ERR
POLL_PRI
POLL_HUP
Доступен ввод данных
Доступны выходные буферы
Доступно входящее сообщение
Ошибка ввода/вывода
Доступны входные данные с высоким приоритетом
Устройство отключено
Any SI_USER
SI_QUEUE
SI_TIMER
SI_ASYNCIO
SI_MESGQ
Сигнал, отправленный kill()
Сигнал, отправленный sigqueue()
Сигнал, сгенерированный по истечении таймера, установленного timer_settime()
Сигнал, сгенерированный завершением асинхронного запроса ввода/вывода
Сигнал, генерируемый при поступлении сообщения в пустую очередь сообщений POSIX (не ЗОСРВ «Нейтрино»)
ЗОСРВ «Нейтрино» также определяет следующие значения:
Сигнал Код Причина
SIGFPE FPE_NOFPU
FPE_NOMEM
Отсутствует аппаратный или программный эмулятор с плавающей запятой
Недостаточно памяти для сохранения контекста с плавающей запятой
SIGSEGV SEGV_STKERR
SEGV_GPERR
SEGV_IRQERR
Исключение стека
Общая защита
Ошибка обработчика прерывания (в настоящее время не используется)
SIGTRAP TRAP_KDBRK
TRAP_CRASH
Точка останова Kdebug
Падение
si_errno
Нуль или значение errno, связанное с сигналом.
si_value
Значение сигнала; можно предоставить его при вызове SignalKill*() или sigqueue().
__data
Объединение (union), содержащее дополнительную информацию, зависящую от сигнала. POSIX определяет следующую информацию:
Сигнал Поле Значение
SIGILL
SIGFPE
si_addr Адрес проблемной инструкции
SIGSEGV
SIGBUS
si_addr Адрес проблемной ссылки на область памяти
SIGCHLD si_pid Идентификатор дочернего процесса
si_status Выходное значение или сигнал
si_uid Реальный идентификатор пользователя для процесса, отправившего сигнал
ЗОСРВ «Нейтрино» определяет следующую информацию:
Сигнал Поле Значение
SIGILL
SIGFPE
SIGSEGV
SIGBUS
si_fltno Номер ошибки (см. ниже)
si_fltip Адрес инструкции, вызвавшей ошибку
si_bdslot Ненулевое значение, если инструкция, вызвавшая ошибку, находится в слоте задержки ветвления на архитектурах, которые их поддерживают. Более ранние версии procnto-* заполняли это поле как случайным значением, поэтому перед проверкой этого поля следует проверить номер версии procnto-*.
SIGTRAP si_trapno Номер ловушки
SIGCHLD si_utime Потребленное пользователем время, в тактах
si_stime Потребленное системное время, в тактах

Номера ошибок (переданные в si_fltno), определены в <sys/fault.h> и включают:

FLTILL
Недопустимая инструкция
FLTPRIV
Привелегированная инструкция
FLTBPT
Инструкция точки останова
FLTTRACE
Функция перехвата событий трассировки (пошаговая)
FLTACCESS
Ошибка доступа к памяти (например, выравнивание)
FLTBOUNDS
Выход за границы памяти (неверный адрес)
FLTIOVF
Целочисленное переполнение
FLTIZDIV
Целочисленное деление на ноль
FLTFPE
Исключение с плавающей запятой
FLTSTACK
Неисправимая ошибка стека
FLTPAGE
Восстановимый отказ страницы (без привязанного сигнала)

Платформо-зависимые номера ошибок определены в <platform/fault.h>.

Классификация:

POSIX 1003.1, ЗОСРВ «Нейтрино»

Тематические ссылки:

errno, kill(), procnto-*, SignalAction(), SignalAction_r(), SignalKill(), SignalKill_r(), SignalWaitinfo(), SignalWaitinfo_r(), sigaction(), sigqueue(), sigtimedwait(), sigwaitinfo(), timer_settime(), waitid()




Предыдущий раздел: Описание API системной библиотеки