init, inir — Инициализация управления процессами.
/etc/init /etc/inir
Программа init вызывается на последнем шаге процедуры начальной загрузки и на первом шаге включения терминалов для вводов пользователей. init является одной из трех программ (INIT, getty.7 и login.1), используемых для инициализации системы с целью вычисления.
init создает процесс для каждого терминала, в который может войти пользователь. Он начинается с открытия консольного устройства /dev/console
для считывания и записи. Затем он вызывает командный процессор, требующий пароль для запуска системы в режиме обслуживания. Так как при этом считывается файл EOF
, система входит в «многопользовательский режим». Если вводится корневой пароль, командный процессор стартуется и подключается к консоле. Когда этот процессор выключается, система переходит к «многопользовательскому режиму».
Если система будет автоматически загружена во время начальной загрузки, init будет автоматически передан -a
флаг при старте. init также передает этот флаг программам, которые она выполняет, с тем, чтобы они могли выбрать различное поведение при условиях autoboot.8.
Пользователь может использовать команду boot, и файловая система может быть загрязнена. В этом случае 2inir 0 приглашает пользователя, спрашивающего, где выполнять fsck(8). (Смотри более подробно fsck.8.)
Пользователь может использовать boot, и файловая система может быть чистой. В этом случае inir считывает команды из файла /etc/rc
. Это выполняется с помощью процедур «multi-user/rc» и «getty/login», описанных ниже.
«multi-user/rc» procedure: Как только файловая система становится чистой, командный процессор завершает свою работу, и init выполняет несколько шагов для того чтобы начать обычное действие. Она вызывает процессор и считывает команды в /etc/ttys
файле. Этот командный файл выполняет служебные задачи, такие как удаление временных файлов, монтирование файловых систем и запуск демонов. Затем он читает /etc/ttys
файл и делит на несколько частей для того, чтобы начать процесс для каждого терминального устройства в файле. Каждая строка в /etc/ttys
печатает состояние строки (0 для закрытой и 1 для открытой), режим строки и последовательную строку (смотри ttys.3). Каждый процесс открывает соответственную последовательную строку для чтения и записи, присваивая файловые дескрипторы 0, 1 и 2 строке и устанавливая ее как стандартные файлы ввода, вывода и ошибок. Если последовательная строка связана с модемом, процесс задерживает открытие строки до тех пор, пока кто-нибудь не вызовет ее, и в этой строке не осуществится передача.
«getty/login» procedure: Как только init открывает строку, она выполняет программу getty, передавая режим строки в качестве аргумента. Программа getty читает имя файла и вызывает login.1 для завершения входного процесса (детально смотри getty.m7. init ждет до тех пор, пока пользователь не выйдет из системы, печатая конец файла ASCII (Ctrl+D) или зависая. В ответ он вызывает и удаляет предыдущий ввод пользователей из файла utmp
, и входит в файл wtmp
, который хранит информацию о вводах и выводах. Затем соответствующая строка еще раз открывается, а getty еще раз вызывается.
init имеет последовательные ответы при зависании, прерывании и сигналах окончания. По сигналу зависания SIGHUP
программа init вызывает изменения системы от режима нормальной работы к режиму обслуживания. По сигналу прерывания SIGINT
init повторно считывает файл ttys
, чтобы открыть какие-либо новые строки и закрыть строки, которые были ранее удалены. По сигналу окончания SIGQUIT
программа init запрещает любые дальнейшие вводы. В общем случае, эти сигналы оказывают серьезное влияние на систему и не должны использоваться неопытными пользователями. Вместо этого, аналогичные функции могут с безопасностью быть выполнены с помощью команд enable.1, disable.1 и SHUTDOWN(8).
/dev/tty*
/etc/utmp
/usr/adm/wtmp
/etc/default/boot
/etc/ttys
/etc/rc
/etc/gettydefs
autoboot.8, telenit.8, disable.1, enable.1, login.1, kill.1, SH(1), SHUTDOWN(8), ttys.3, getty.7, gettydefs.3, inittab.3
Если в течение пяти минут или менее на одной и той же строке стартуются семь или более процессов getty, init записывает сообщение об ошибках в /dev/console
и отказывается запускать другую getty на той же строке, по крайней мере, в течение 30 минут. Если требуется, init стартует немедленно снова, для работы init нужно запустить SIGINT
.