Сигналы
Сигналы — это один из способов межпроцессного взаимодействия. Они обеспечивают возможность обмена процессами элементарными сообщения- ми. Получив сигнал, процесс может отреагировать на него по-разному в зави- симости от полученного сигнала и действий, запрограммированных в коде процесса. Так, например, процесс может перечитать файл конфигурации или завершить работу.
Список сигналов, используемых в системе, можно получить с помощью команды kill -l, а их подробное описание доступно с помощью man 7 signal.
Наиболее часто используются сигналы, приведенные в списке далее:
r 1 — HUP, разрыв связи с терминалом (Hang Up — положить трубку). Мно- гие демоны используют этот сигнал, как команду перечитать их конфигу- рационный файл и продолжить работу с измененными настройками. Обо- лочка Bash реагирует на этот сигнал завершением сеанса;
r 2 — INT, прерывание процесса. Генерируется при нажатии комбинации клавиш <Ctrl>+<C>;
r 3 — QUIT, сброс процесса. Генерируется при нажатии комбинации клавиш
<Ctrl>+<\>;
r 15 — TERM, сигнал для корректного завершения процесса. Этот сигнал ко- манда kill посылает по умолчанию;
r 9 — KILL, аварийное завершение процесса.
Каким образом то или иное приложение реагирует на получение некоторого сигнала, зависит от того, как эта программа написана. В программе получе- ние сигнала может перехватываться и обрабатываться специальным образом.
Сигнал KILL не может быть перехвачен. Этот сигнал приводит к немедлен- ному и, таким образом, часто некорректному снятию процесса с исполнения. При этом файлы, открытые процессом, не закрываются нормальным спосо- бом, что может привести к потере данных.
Если необходимо послать сигнал некоторым процессам, то сначала требуется узнать PID этих процессов, а затем с помощью команды kill послать им тре- буемый сигнал, номер которого указывается после тире. Если номер сигнала или его имя не задано после дефиса, то команда kill посылает целевым про- цессам сигнал 15 (TERM). Так, например, можно попытаться послать сигнал оболочке bash (пример 5.20).
Пример 5.20. Реакция процессов на сигналы |
$ ps
PID TTY TIME CMD
2179 pts/0 00:00:00 bash
2180 pts/0 00:00:00 ps
$ kill 2179
$ kill -2 2179
$ kill -1 2179 login:
Пример 5.20 демонстрирует, что оболочка bash игнорирует сигнал 15 (TERM), сигнал 2 (INT) очищает командную строку, а получив сигнал 1 (HUP), оболоч- ка завершает работу и выходит из сеанса.
Посылать сигналы процессам могут только их владелец и суперпользователь. Если родительским процессом получен сигнал, приводящий к его остановке, то в нормальной ситуации будут сняты с выполнения все его дочерние про- цессы.
Удобно пользоваться командами pkill и killall. Они действуют подобно команде kill, позволяя, как и kill, послать требуемый сигнал нескольким заданным процессам. В отличие от команды kill, для команд pkill и killall достаточно указать имя командной строки процесса.
Например, следующая команда приведет к немедленному аварийному оста- нову всех копий демона httpd (пример 5.21).
Пример 5.21. Команда killall |
# killall -9 httpd
В результате передачи сигнала 9 (KILL) всем процессам httpd они будут сня- ты с исполнения, т. к. перехватить такой сигнал невозможно.
Дата добавления: 2015-06-12; просмотров: 801;