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

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

Таблица 11.7

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

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

Таблица 11.8

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

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

Таблица 11.9

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

Сигнал SIGCONT возобновляет остановленный процесс и игнорируется при получении неостановленным процессом. Сигнал SIGCHLD по умолчанию игнорируется (табл. 11.10).

Таблица 11.10

Перейти на страницу:

Похожие книги