Глава 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.