Основы работы в ОС Linux



         

Сигналы и команда kill


Сигналы - это средство, с помощью которого процессам можно передать сообщения о некоторых событиях в системе. Сами процессы тоже могут генерировать сигналы, с помощью которых они передают определенные сообщения ядру и другим процессам. С помощью сигналов можно осуществлять такие акции управления процессами, как приостановка процесса, запуск приостановленного процесса, завершение работы процесса. Всего в Linux существует 63 разных сигнала, их перечень можно посмотреть по команде

[user]$ kill -l

Сигналы принято обозначать номерами или символическими именами. Все имена начинаются на SIG, но эту приставку иногда опускают: например, сигнал с номером 1 обозначают или как SIGHUP, или просто как HUP.

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

Можно заставить процесс игнорировать или блокировать некоторые сигналы. Игнорируемый сигнал просто отбрасывается процессом и не оказывает на него никакого влияния. Блокированный сигнал ставится в очередь на выдачу, но ядро не требует от процесса никаких действий до разблокирования сигнала. После разблокирования сигнала программа его обработки вызывается только один раз, даже если в течение периода блокировки данный сигнал поступал несколько раз.

В табл. 8.1. приведены некоторые из часто встречающихся сигналов.

Таблица 8.1. Сигналы

№ИмяОписаниеМожно перехватыватьМожно блокироватьКомбинация клавиш
1HUPHangup. ОтбойДаДа
2INTInterrupt. В случае выполнения простых команд вызывает прекращение выполнения, в интерактивных программах - прекращение активного процессаДаДа<Ctrl>+<C> или <Del>
3QUITКак правило, сильнее сигнала InterruptДаДа<Ctrl>+<\>
4ILLIllegal Instruction. Центральный процессор столкнулся с незнакомой командой (в большинстве случаев это означает, что допущена программная ошибка). Сигнал отправляется программе, в которой возникла проблемаДаДа
8FPEFloating Point Exception. Вычислительная ошибка, например, деление на нольДаДа
9KILLВсегда прекращает выполнение процессаНетНет
11SEGVSegmentation Violation. Доступ к недозволенной области памятиДаДа
13PIPEБыла предпринята попытка передачи данных с помощью конвейера или очереди FIFO, однако не существует процесса, способного принять эти данныеДаДа
15TERMSoftware Termination. Требование закончить процесс (программное завершение)ДаДа
17CHLDИзменение статуса порожденного процессаДаДа
18CONTПродолжение выполнения приостановленного процессаДаДа
19STOPПриостановка выполнения процессаНетНет
20TSTRСигнал останова, генерируемый клавиатурой. Переводит процесс в фоновый режимДаДа<Ctrl>+<Z>




Содержание  Назад  Вперед