Библиотека сайта rus-linux.net
Глава 7. init
Эта глава описывает процесс init, который является первым процессом уровня пользователя, запускаемым ядром. init имеет много важных режимов работы, таких как запуск getty (чтобы пользователи могли войти в систему), изменение уровня выполнения системы и удаление ненужных процессов. Эта глава объясняет как настроить init и как можно менять и использовать различные уровни выполнения.
Процесс init запускается первым
init является одной из тех программ, которые абсолютно необходимы для системы Linux, но это Вы обычно можете игнорировать. Хороший дистрибутив Linux поставляется с настройками для init, которые подходят для большинства систем. В таком случае Вам не придется что-либо настраивать самому. Вам придется заниматься настройкой init если Вы используете последовательные терминалы (хотя сейчас ими уже никто не пользуется), dial-in (не dial-out) модемы, или меняете настройки уровней выполнения, что вообще-то нужно редко.
Когда ядро запущено (загружено в память, получило управление и инициализировало все драйверы устройств и структуры), оно запускает программу уровня пользователя. Первой такой программой всегда является именно init. Таким образом, init всегда является первым процессом (номер процесса всегда 1).
Ядро ищет init в нескольких местах, в которых он
располагается по традиции. В Linux обычно используется имя
/sbin/init
. Если ядро не нашло
init, оно пробует запустить /bin/sh
. Если и тут
происходит неудача, система выдает ошибку и останавливается.
Когда init запущен, он завершает процесс загрузки
системы и выполняет ряд административных задач, таких как проверка файловых
систем, очистка каталога /tmp
, запуск различных
сервисов и запуск процесса getty для каждого терминала
и виртуальной консоли откуда пользователи могут входить в систему (см.
главу 8 о регистрации пользователей и входе в
систему).
После нормального запуска системы init перезапускает getty для каждого терминала после того, как пользователь завершил работу с системой (чтобы следующий пользователь мог зарегистрироваться в системе). init также перехватывает ничейные процессы: когда процесс запускает порожденный процесс и завершает работу до своего потомка, его потомок немедленно становится порожденным из init. Это важно по различным техническим причинам. Вам следует знать это чтобы понять списки процессов и графы дерева процессов. Имеется несколько вариантов init. Большинство дистрибутивов Linux используют sysvinit (написал Miquel van Smoorenburg), который основан на System V init. BSD версии Unix имеют отличия в процессе init . Главным различием являются уровни выполнения: System V имеет их, а BSD нет (по крайней мере, обычно). Мы будем рассматривать только sysvinit.