Сигналы

Сигналы — это один из способов межпроцессного взаимодействия. Они обеспечивают возможность обмена процессами элементарными сообщения- ми. Получив сигнал, процесс может отреагировать на него по-разному в зави- симости от полученного сигнала и действий, запрограммированных в коде процесса. Так, например, процесс может перечитать файл конфигурации или завершить работу.

Список сигналов, используемых в системе, можно получить с помощью команды 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; просмотров: 792;


Поиск по сайту:

При помощи поиска вы сможете найти нужную вам информацию.

Поделитесь с друзьями:

Если вам перенёс пользу информационный материал, или помог в учебе – поделитесь этим сайтом с друзьями и знакомыми.
helpiks.org - Хелпикс.Орг - 2014-2024 год. Материал сайта представляется для ознакомительного и учебного использования. | Поддержка
Генерация страницы за: 0.007 сек.