В дистрибутиве Slackware этим сценариям присвоены имена:
♦
rc.S
— сценарий запуска (действие sysinit);
♦
rc.0
— останов системы;
♦
rc.6
— перезагрузка;
♦
rc.K
— однопользовательский режим;
♦
rc.M
— многопользовательский текстовый режим;
♦
rc.4
— многопользовательский режим с графическим входом в систему.
В
/etc/default/rc.conf
хранятся в неизменном хорошо откомментированном виде все системные настройки в количестве нескольких сотен, а редактируемый администратором
/etc/rc.conf
содержит только отличия желаемой конфигурации системы от
/etc/defaults/rc.conf
, которых раз в десять меньше. Загрузочные сценарии режимов прочитывают оба эти файла и и зависимости от требуемой конфигурации могут запускать из-под себя дополнительные сценарии инициализации различных служб:
rc.inetd*
,
rc.cdrom
и т.п. Последним при загрузке выполняется сценарий
rc.local
, содержание которого определяется администратором конкретной системы.
Инициализация в стиле System V
В этом стиле каждому уровню выполнения соответствует целый каталог, все сценарии в котором выполняются при переключении на этот уровень. Это подкаталоги
/etc
с именами
rc0.d
,
rc1.d
, …,
rc6.d
. Сценарии в этих каталогах — файлы с именами вроде S12syslog или K95kudzu — только символические ссылки на настоящие сценарии, находящиеся в
/etc/init.d
. Каждый из настоящих сценариев, будучи вызван с аргументом start, запускает свою службу, а с аргументом stop — останавливает ее. Какой аргумент будет ему передан, зависит от первой буквы имени символической ссылки: S означает start, K (kill) — stop. Следующее за этой буквой число определяет порядок вызова настоящих сценариев: чем оно больше, тем позже срабатывает данная ссылка при включении текущего уровня. Сначала выполняются все сценарии останова процессов, не разрешенных на данном уровне, потом — все сценарии запуска (рис. 9.2).
Рис. 9.2. Порядок инициализации в стиле System V
Переключением уровней выполнения занимается центральный сценарий
/etc/rc
. Вызванный с аргументом N, где N — это номер включаемого уровня, он ищет каталог
/etc/rc.N
и выполняет в нем сначала все стоп-сценарии, потом все старт-сценарии.
Для выбора демонов, которые будут запускаться автоматически при загрузке системы, обычно используют конфигуратор drakconf в операционной системе Linux Mandrake, system-config-services в Fedora Core (рис.9.3) или setup в других Red Hat-подобных дистрибутивах.
Чтобы обеспечить автоматический запуск какого-нибудь сервиса, нужно создать сценарий для его запуска и поместить его в каталоге /etc/init.d. Затем, в зависимости от уровня выполнения, в каталоге /etc/rcN.d нужно создать символические ссылки на этот сценарий для его запуска и останова.
Если вы хотите сами создать сценарий для запуска своего демона, можете воспользоваться шаблоном, приведенным в листинге 9.3.
После того, как в процессе инициализации системы будет выполнен загрузочный сценарий уровня но умолчанию, последним выполняется сценарий
/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 представляет дерево процессов сразу в наглядном виде: