Выбрать главу
Общая сводка сигналов

В этом разделе мы перечисляем сигналы, в которых нуждаются программы Linux и UNIX для обеспечения стандартных реакций.

Стандартное действие для сигналов, перечисленных в табл. 11.7, — аварийное завершение процесса со всеми последствиями вызова функции _exit (которая похожа на exit, но не выполняет никакой очистки перед возвратом управления ядру). Тем не менее, состояние становится доступным функции wait, а функция waitpid указывает на аварийное завершение, вызванное описанным сигналом.

Таблица 11.7

Имя сигнала Описание
SIGALRM Генерируется таймером, установленным функцией alarm
SIGHUP Посылается управляющему процессу отключающимся терминалом или управляющим процессом во время завершения каждому процессу с высоким приоритетом
SIGINT Обычно возбуждается с терминала при нажатии комбинации клавиш <Ctrl>+<C> или сконфигурированного символа прерывания
SIGKILL Обычно используется из командной оболочки для принудительного завершения процесса с ошибкой, т.к. этот сигнал не может быть перехвачен или проигнорирован
SIGPIPE Генерируется при попытке записи в канал при отсутствии связанного с ним считывателя
SIGTERM Отправляется процессу как требование завершиться. Применяется UNIX при выключении для запроса остановки системных сервисов. Это сигнал, по умолчанию посылаемый командой kill
SIGUSR1, SIGUSR2 Может использоваться процессами для взаимодействия друг с другом, возможно, чтобы заставить их сообщить информацию о состоянии

По умолчанию сигналы, перечисленные в табл. 11.8, также вызывают преждевременное завершение. Кроме того, могут выполняться действия, зависящие от реализации, например, создание файла core.

Таблица 11.8

Имя сигнала Описание
SIGFPE Генерируется исключительной ситуацией во время операций с плавающей точкой
SIGILL Процессор выполнил недопустимую команду. Обычно возбуждается испорченной программой или некорректным модулем совместно используемой памяти
SIGQUIT Обычно возбуждается с терминала при нажатии комбинации клавиш <Ctrl>+<\> или сконфигурированного символа завершения (quit)
SIGSEGV Нарушение сегментации, обычно возбуждается при чтении из некорректного участка памяти или записи в него, а также выход за границы массива или разыменование неверного указателя. Перезапись локального массива и повреждение стека могут вызвать сигнал SIGSEGV при возврате функции по неверному адресу

При получении одного из сигналов, приведенных в табл. 11.9, по умолчанию процесс приостанавливается.

Таблица 11.9

Имя сигнала Описание
SIGSTOP Останавливает выполнение (не может быть захвачен или проигнорирован)
SIGTSTP Сигнал останова терминала часто возбуждается нажатием комбинации клавиш <Ctrl>+<Z>
SIGTTIN, SIGTTOU Применяются командной оболочкой для обозначения того, что фоновые задания остановлены, т.к. им необходимо прочесть данные с терминала или выполнить вывод