Информация о сигнале
#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
Тип позволяет получать информацию о сигнале. Структура включает следующие поля:
Значение | Описание |
---|---|
-128 <= si_code <= 0 | Пользовательские значения; можно предоставить их при вызове SignalKill*() |
0 < si_code <= 127 | Системные значения, генерируемые ядром |
Сигнал | Код | Причина |
---|---|---|
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 Падение |
Сигнал | Поле | Значение |
---|---|---|
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>
и включают:
Платформо-зависимые номера ошибок определены в <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 системной библиотеки