Стандартные сигналы
В этом разделе перечислены имена стандартных типов сигналов с описанием, какое событие они обозначают. Каждое имя сигнала — это макрос, соответствующий положительному числу — номеру сигнала. Программа не должна делать никаких предположений о номерах сигналов и всегда ссылаться на сигналы, используя символические константы. Номера сигналов могут меняться от системы к системе, а имена сигналов стандартизованы.
Имена сигналов определены в заголовочном файле <signal.h>. Макрос NSIG даёт общее количество сигналов, определённых в системе. Поскольку сигналы нумеруются последовательно, его значение на 1 больше максимального номера сигнала.
Чтобы напечатать строку, описывающую сигнал (например, для SIGSEGV — "Segmentation fault"), можно использовать функцию strsignal, описанную следующим образом:
char *strsignal(int signum);
Здесь signum — номер сигнала.
Далее приведены таблицы сигналов, разбитых по группам. В столбце «реакция» определена реакция на данный сигнал по умолчанию. Реакция может описываться комбинацией букв, каждая из которых означает следующее:
C Записать дамп памяти (core dump).
T Завершить процесс.
B Сигнал не может быть обработан, заблокирован или проигнорирован.
S Остановить процесс.
N Ничего не делать.
R Продолжить процесс после остановки.
Имя
| Реакция
| Описание
|
Программные ошибки
|
SIGFPE
| CT
| Фатальная арифметическая ошибка. Для целочисленных операций это может быть деление на 0, умножение минимального целого числа на -1. Для вещественных чисел существует много возможных ошибок. Например, переполнение, антипереполнение, деление на 0 и т. д.
|
SIGILL
| CT
| Недопустимая инструкция. Процесс пытался выполнить код, не соответствующий никакой инструкции процессора, или привилегированную инструкцию процессора. Обычно это означает, что процесс пытался выполнить какие-то данные. Это может произойти из-за переполнения массива, размещённого в стеке, или из-за неинициализированного указателя на функцию.
|
SIGSEGV
| CT
| Попытка чтения или записи по адресу, на который не отображается память, попытка записи в память, открытую только для чтения, попытка выполнения невыполняемой памяти. Чтение или запись по адресу 0 (NULL) может вызывать эту ошибку.
|
SIGBUS
| CT
| Неверное обращение к памяти, например, обращение по невыровненному адресу. Обращение по адресу 0 также может вызыать этот сигнал. Типы сигналов SIGSEGV и SIGBUS близки по смыслу, и точное деление между ними зависит от операционной системы и типа процессора.
|
SIGABRT
| CT
| Ошибка, выявленная самой программой, которая в этом случае вызвала функцию abort() .
|
SIGTRAP
| CT
| Сигнал трассировки. Генерируется специальной инструкцией трассировки процессора и, возможно, другими инструкциями. Этот сигнал используется отладчиками.
|
©2015 arhivinfo.ru Все права принадлежат авторам размещенных материалов.