Организация UNIX-систем и ОС Solaris



         

Команды управления процессами


Основным средством управления процессами является команда kill, передающая процессу сигналы. Также можно использовать вышеописанные программы изменения приоритета процесса, прежде всего, команду nice, для управления приоритетом.

Не следует путать команду kill с сигналом KILL - они просто тезки; с помощью одноименной команды можно передать процессу как сигнал KILL, так и любые другие сигналы.

Будучи запущенной без ключей, она передает процессу сигнал TERM, требующий завершения процесса:

kill [-ключи] номер_процесса

Например, для завершения процесса sendmail можно выполнить следующие действия:

: ps auxw | grep sendmail root 2057 0.0 0.2 2664 444 ? S Jul08 3:24 sendmail: accepting connections

Как видно, sendmail имеет PID 2057. Посылаем сигнал, требующий завершения процесса:

kill 2057

И повторяем последнее действие для проверки (контрольный выстрел):

kill 2057 kill: (2057) - No such pid

Сообщение No such pid говорит о том, что процесс уже завершился.

Программу kill можно использовать для передачи любых сигналов. Чтобы передать некий сигнал, надо указать в качестве ключа числовое или мнемоническое обозначение этого сигнала.

Например, после изменений, внесенных в файл конфигурации /etc/inetd.conf, следует потребовать от демона inetd перечитать этот файл конфигурации.

Это можно сделать, послав демону сигнал HUP (номер один), так как известно, что этот демон перечитывает файлы конфигурации, если получает сигнал с номером 1. Вначале надо узнать идентификатор процесса, которому будем посылать сигнал:

ps -ef | grep inetd root 156 1 0 17:43:44 ? 0:00 /usr/sbin/inetd -s root 4555 760 0 19:15:16 pts/5 0:00 grep inetd

Мы видим два процесса, в строках информации о которых есть слово inetd. Первая строка, grep inetd - это тот самый процесс grep, который мы только что сами запустили. Программы ps и grep запустились одновременно, и ps показал "мгновенный снимок" таблицы процессов.

Строка grep inetd в таком случае должна была бы показываться всегда, но на практике иногда мы не видим ее при запуске такой команды. Проведите эксперимент: возможно, что в вашей системе (это зависит от ее скорости и текущей загрузки) вы никогда не увидите строку grep или наоборот, будете ее видеть всегда.

Это связано с тем, что физически запуск grep происходит чуть-чуть позже, чем ps, последняя может успеть завершиться раньше, чем grep начнется (ведь таблица процессов может оказаться маленькой и работы у ps будет мало). Тогда строки про grep в списке найденных процессов не будет.

Теперь пошлем сигнал процессу inetd :




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