Здавалка
Главная | Обратная связь

Стандартные сигналы



В этом разделе перечислены имена стандартных типов сигналов с описанием, какое событие они обозначают. Каждое имя сигнала — это макрос, соответствующий положительному числу — номеру сигнала. Программа не должна делать никаких предположений о номерах сигналов и всегда ссылаться на сигналы, используя символические константы. Номера сигналов могут меняться от системы к системе, а имена сигналов стандартизованы.

Имена сигналов определены в заголовочном файле <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 Все права принадлежат авторам размещенных материалов.