В этом разделе мы перечисляем сигналы, в которых нуждаются программы Linux и UNIX для обеспечения стандартных реакций.
Стандартное действие для сигналов, перечисленных в табл. 11.7, — аварийное завершение процесса со всеми последствиями вызова функции _exit (которая похожа на exit, но не выполняет никакой очистки перед возвратом управления ядру). Тем не менее, состояние становится доступным функции wait, а функция waitpid указывает на аварийное завершение, вызванное описанным сигналом.
| Имя сигнала | Описание |
|---|---|
SIGALRM | Генерируется таймером, установленным функцией alarm |
SIGHUP | Посылается управляющему процессу отключающимся терминалом или управляющим процессом во время завершения каждому процессу с высоким приоритетом |
SIGINT | Обычно возбуждается с терминала при нажатии комбинации клавиш |
SIGKILL | Обычно используется из командной оболочки для принудительного завершения процесса с ошибкой, т.к. этот сигнал не может быть перехвачен или проигнорирован |
SIGPIPE | Генерируется при попытке записи в канал при отсутствии связанного с ним считывателя |
SIGTERM | Отправляется процессу как требование завершиться. Применяется UNIX при выключении для запроса остановки системных сервисов. Это сигнал, по умолчанию посылаемый командой kill |
SIGUSR1, SIGUSR2 | Может использоваться процессами для взаимодействия друг с другом, возможно, чтобы заставить их сообщить информацию о состоянии |
По умолчанию сигналы, перечисленные в табл. 11.8, также вызывают преждевременное завершение. Кроме того, могут выполняться действия, зависящие от реализации, например, создание файла core.
| Имя сигнала | Описание |
|---|---|
SIGFPE | Генерируется исключительной ситуацией во время операций с плавающей точкой |
SIGILL | Процессор выполнил недопустимую команду. Обычно возбуждается испорченной программой или некорректным модулем совместно используемой памяти |
SIGQUIT | Обычно возбуждается с терминала при нажатии комбинации клавиш |
SIGSEGV | Нарушение сегментации, обычно возбуждается при чтении из некорректного участка памяти или записи в него, а также выход за границы массива или разыменование неверного указателя. Перезапись локального массива и повреждение стека могут вызвать сигнал SIGSEGV при возврате функции по неверному адресу |
При получении одного из сигналов, приведенных в табл. 11.9, по умолчанию процесс приостанавливается.
| Имя сигнала | Описание |
|---|---|
SIGSTOP | Останавливает выполнение (не может быть захвачен или проигнорирован) |
SIGTSTP | Сигнал останова терминала часто возбуждается нажатием комбинации клавиш |
SIGTTIN, SIGTTOU | Применяются командной оболочкой для обозначения того, что фоновые задания остановлены, т.к. им необходимо прочесть данные с терминала или выполнить вывод |
Сигнал SIGCONT возобновляет остановленный процесс и игнорируется при получении неостановленным процессом. Сигнал SIGCHLD по умолчанию игнорируется (табл. 11.10).