Где проводится профессиональная переподготовка "Системное администрирование Windows"? Что-то я не совсем понял как проводится обучение. |
Управление процессами
Процессы-зомби
В Solaris 9 впервые появилась программа preap, которая позволяет убрать из системы "мнимые" (defunct), не до конца завершившиеся процессы, которые также носят название "зомби" (zombie). Эти процессы совершенно безобидны, они – самые обыкновенные процессы, чьи родительские процессы не смогли принять их код завершения (например, в результате преждевременного завершения родительского процесса или иного сбоя). Несмотря на безобидность, они могут попусту занимать ресурсы системы, если таких процессов будет много. Обычно процессы-зомби автоматически уничтожаются процессом init, но если этого почему-либо не произошло, можно воспользоваться программой preap, которая примет код завершения процесса-зомби и даст ему упокоиться с миром.
Команды управления процессами
Основным средством управления процессами является команда 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:
kill –1 156
Помните, не все демоны и не во всех системах по сигналу HUP перечитывают свой файл конфигурации. Прежде, чем посылать демону сигналы, выясните, как он на них собирается реагировать: почитайте в man о его повадках.
Владелец процесса может посылать сигналы своему процессу, но привилегированный пользователь (root) может отправить любой сигнал любому процессу.
Посылка сигнала KILL (номер 9) вызывает безусловное немедленное завершение процесса:
kill –9 PID.
или
kill –KILL PID
При выполнении команды kill лучше указывать мнемонические обозначения сигналов, а не числовые: в разных системах UNIX сигналы с одним числовым номером могут иметь разные смыслы. Впрочем, можно смело руководствоваться вышеприведенными таблицами в разделе "сигналы" в отношении сигналов в Solaris.
Чтобы послать сигнал нескольким процессам одновременно, следует использовать программу pkill или killall (их подробное описание есть в разделе "сигналы" выше в этой лекции).
При запуске процесса можно менять его базовый приоритет внутри класса планирования. Это возможно только для класса планирования разделения времени. Обычный пользователь может только понижать приоритет процесса, а привилегированный пользователь может менять NICE в обе стороны. Для этого применяется команда nice, которая в разных системах имеет разные ключи и немного различающийся синтаксис.
nice -n приращение команда
например,
nice –n 5 ls
Это "5" воспринимается как увеличение значения NICE на 5, т.е. снижение приоритета на 5 единиц. Пользователь root может дать команду вида nice –n -4 ls. Это будет воспринято как увеличение базового приоритета, т.е. уменьшение значения NICE на 4.
Базовый приоритет уже запущенного процесса можно менять командой renice:
renice -n приращение PID
Команда renice может быть использована также для изменения приоритета группы процессов по разным признакам (для уточнения обратитесь к man renice ).
Работа с заданиями
Заданием называется запущенные одной командой несколько программ (в частном случае, это может быть и одна программа). Для управления заданиями можно использовать встроенные команды командных интерпретаторов. Так, в большинстве из них есть команды jobs, bg и fg для получения информации о заданиях, переключении задания в фоновый или интерактивный режим соответственно.
Более подробно о работе с заданиями рассказано в "Запуск и остановка системы" .