
Рис. 9.2. Порядок инициализации в стиле System V
Переключением уровней выполнения занимается центральный сценарий /etc/rc
. Вызванный с аргументом N, где N — это номер включаемого уровня, он ищет каталог /etc/rc.N
и выполняет в нем сначала все стоп-сценарии, потом все старт-сценарии.
Для выбора демонов, которые будут запускаться автоматически при загрузке системы, обычно используют конфигуратор drakconfв операционной системе Linux Mandrake, system-config-servicesв Fedora Core (рис.9.3) или setupв других Red Hat-подобных дистрибутивах.

Рис. 9.3. Конфигуратор служб system-config-services
Чтобы обеспечить автоматический запуск какого-нибудь сервиса, нужно создать сценарий для его запуска и поместить его в каталоге /etc/init.d. Затем, в зависимости от уровня выполнения, в каталоге /etc/rcN.dнужно создать символические ссылки на этот сценарий для его запуска и останова.
Если вы хотите сами создать сценарий для запуска своего демона, можете воспользоваться шаблоном, приведенным в листинге 9.3.
Листинг 9.3. Шаблон для запуска демона
#!/bin/bash
#
# Подключаем библиотеку функций
. /etc/init.d/functions
#
# Определяем параметры
case "$!" in
start)
# Запуск демона
echo "Starting my_daemon..."
daemon my_daemon
touch /var/lock/subsys/my_daemon
;;
stop)
# Останов демона
killproc my_daemon
rm -f /var/lock/subsys/my_daemon
rm -f /var/run/my_daemon.pid
;;
status)
# Выводим статистику работы
;;
restart | reload)
# действия, выполняемые при перезагрузке демона
;;
*)
# Произошел вызов без параметров
echo "Usage: my_daemon {start|stop|status|restart|reload}"
exit 1
esac
exit 0
После того, как в процессе инициализации системы будет выполнен загрузочный сценарий уровня но умолчанию, последним выполняется сценарий /etc/rc.local
. Выполнив все сценарии, initпереходит к другим записям в /etc/inittab
, относящимся к текущему уровню. Обычно там остаются только перезапускаемые (respawn) действия: процессы, которые initзапускает в фоне, а когда какой-нибудь из них завершается, запускает вновь. Так ведут себя процессы *getty, обслуживающие виртуальные консоли, и менеджер дисплеев системы X Window. Инициализация системы считается законченной, когда запушены все перезапускаемые процессы и initостается только следить за ними.
9.2. Команды управления процессами
9.2.1. Иерархия процессов: ps и pstree
О том, что команда psпозволяет просмотреть сведения обо всех процессах, протекающих в системе в данный момент, вы уже знаете (п.3.2). С ключом -f эта команда выводит как PID самого процесса, так и PPID его родителя, то есть по ее выводу можно восстановить всю структуру дерева процессов до их общего предка — процесса init. «Древовидный» взгляд может понадобиться, например, если вам нужно уничтожить целую группу процессов, происходящих от общего предка: в этом случае вы можете не убивать их по очереди, а просто послать сигнал TERM их родительскому процессу.
Команда pstreeпредставляет дерево процессов сразу в наглядном виде:
$ pstree
init┬acpid
├atd
├bonobo-activati
...
├crond
├gconfd-2
├gdm-binary──gdm-binary┬X
│
└gnome-session
├gnome-panel
├gnome-settings-
├gnome-terminal┬bash─pstrее
│
├bash─su─bash─man─sh─sh—i┬less
│ │ └─nroff—iconv
│
├bash─su─bash
│ └gnome-pty-helpe
...
├syslogd
├udevd
└xinetd
Ключ -p выводит вместе с именем процесса его PID, а ключ -u — имя пользователя, запустившего процесс. Если в качестве аргумента указать PID, то команда выведет не все дерево, а только ветку потомков процесса с этим PID. Имя пользователя в качестве аргумента требует вывести все ветки процессов, запущенных этим пользователем: у них общего предка может и не быть.
Читать дальше
Конец ознакомительного отрывка
Купить книгу