INIT(1M) INIT(1M)
НАЗВАНИЕ
init - инициализация управления процессами
СИНТАКСИС
/etc/init [0] [1] [2] [3] [4] [5] [6] [S] [s] [Q] [q] [a] [b] [c]
ОПИСАНИЕ
Процесс init является главным диспетчером процессов.
Его основная задача - создание процессов в соответствии
со схемой, хранящейся в файле /etc/inittab [см.
inittab(4)]. Схема обычно предписывает запуск процессов
getty для всех терминальных линий, посредством которых
пользователи могут войти в систему. Init также контро-
лирует работу автономных процессов, требующихся конк-
ретной системе.
С точки зрения процесса init система в любой момент
времени находится на определенном уровне выполнения.
Уровень_выполнения может рассматриваться как программ-
ная конфигурация системы, причем каждая конфигурация
допускает существование только определенной группы про-
цессов. Процессы, запускаемые init'ом на каждом уровне
выполнения, описаны в файле inittab. Возможны восемь
уровней выполнения: от 0 до 6, S и s. Уровень выполне-
ния изменяется при запуске init'а привилегированным
пользователем. Запущенный пользователем init посылает
соответствующие сигналы исходному процессу init, соз-
данному при перезагрузке системы, сообщая, на какой
уровень выполнения надо перейти.
Процесс init запускается в рамках системы UNIX в ка-
честве последнего шага процедуры загрузки. Сначала init
ищет в файле /etc/inittab строку initdefault [см.
inittab(4)]. Если таковая имеется, то init использует
ее для определения начального значения уровня выполне-
ния. Если такой строки нет, то init запрашивает началь-
ное значение уровня выполнения у пользователя через
виртуальную системную консоль, /dev/syscon. Если в от-
вет вводится буква S или s, init переходит в однополь-
зовательский режим (SINGLE USER). Это единственный уро-
вень выполнения, который не требует наличия заранее
подготовленного файла /etc/inittab. Иными словами, если
файл inittab не существует, то допускается работа толь-
ко в однопользовательском режиме. При этом виртуальная
консоль открывается на чтение и запись и сразу же вы-
полняется команда /bin/su -root. Для выхода из одно-
пользовательского режима следует использовать init, так
как при завершении shell'а по концу файла init только
переинициализирует однопользовательский режим.
Если во время загрузки виртуальная системная консоль
(/dev/syscon) связана не с физической системной кон-
солью, подключенной к процессору (/dev/console), то при
запросе нового уровня выполнения процесс init может по-
терпеть неудачу.
В ответ на вопрос о новом уровне выполнения можно ввес-
ти только одну из цифр от 0 до 6 либо буквы S или s.
Любой другой ответ будет отвергнут и вопрос будет задан
вновь.
При вводе S или s init действует как описано выше для
однопользовательского режима и, кроме того, связывает
/dev/syscon с терминалом пользователя, делая его вирту-
альной системной консолью. На физическую консоль /dev/
console выводится сообщение о переназначении виртуаль-
ной консоли.
При первом запуске init'а и при каждом переходе из од-
нопользовательского режима на другой уровень выполне-
ния, init устанавливает характеристики виртуальной кон-
соли, /dev/syscon, с помощью вызова ioctl(2), в соот-
ветствии с хранящимися в файле /etc/ioctl.syscon харак-
теристиками. Этот файл записывается процессом init при
переходе в однопользовательский режим.
Если в качестве ответа введена цифра от 0 до 6, то init
устанавливает соответствующий уровень выполнения.
Если init впервые перешел на уровень выполнения, отлич-
ный от однопользовательского, то сначала файл inittab
просматривается в поисках строк, где в качестве дейст-
вия указаны boot или bootwait. Процессы, соответствую-
щие этим строкам, запускаются перед какой-либо другой
обработкой inittab при условии, что введенный уровень
выполнения совпадает с указанным в строке. Таким обра-
зом, перед тем, как пользователи получат доступ к сис-
теме, могут быть произведены некоторые начальные дейст-
вия, такие, например, как монтирование файловых систем.
Затем в файле inittab ищутся все строки, которые должны
быть обработаны на данном уровне выполнения.
Уровень выполнения 2 определяется как содержащий все
процессы для терминалов и демоны, которые должны рабо-
тать в многопользовательском окружении, поэтому данный
режим называют многопользовательским (MULTI-USER).
Уровень выполнения 3 предназначен для работы с системой
разделения удаленных файлов. Он является расширением
многопользовательского режима.
Уровень выполнения 4 можно определить как некий допол-
нительный многопользовательский режим; он не является
необходимым для работы системы и обычно не использует-
ся.
Можно запустить init, указав в качестве аргумента один
из псевдоуровней a, b или c. Реальный уровень выполне-
ния при этом не изменяется, а в смысле порождения про-
цессов псевдоуровни не отличаются от реальных. Обычно
псевдоуровни используют для выполнения группы команд.
Для многопользовательского режима файл inittab подго-
тавливается таким образом, чтобы init создавал процесс
для каждого пользовательского терминала.
Каждый процесс shell, запущенный с терминала, в конце
концов будет завершен либо из-за получения символа кон-
ца файла, либо из-за освобождения линии. Когда init по-
лучает сигнал, о том, что запущенный им процесс завер-
шен, он записывает этот факт и причину завершения в
файлы /etc/utmp и /etc/wtmp, если последний существует
[см. who(1)]. История процессов, запускаемых init'ом,
хранится в файле /etc/wtmp.
Для запуска процессов, упомянутых в файле inittab, init
читает весь файл и для каждой строки, процесс в которой
требует перезапуска, порождается потомок. После запуска
всех процессов, указанных в файле inittab, init ожида-
ет, пока либо один из его потомков завершится, либо бу-
дет получен сигнал об ошибке питания, либо порожденный
пользователем init предпишет изменить уровень выполне-
ния. Когда одно из перечисленных условий становится ис-
тинным, init вновь просматривает файл inittab. Добав-
лять строки в файл inittab можно в любое время, однако
init все равно будет ожидать одно из трех вышеуказанных
событий. Чтобы заставить init немедленно обработать
файл inittab, его следует разбудить командами init Q
или init q.
Если init получает сигнал об ошибке питания (SIGPWR),
он просматривает файл inittab в поисках строк с дейст-
виями powerfail и powerwait. Соответствующие этим стро-
кам процессы (если позволяет уровень выполнения) будут
выполнены в первую очередь. Таким образом, init может
выполнять различные процедуры при завершении работы
операционной системы. Заметим, что в однопользовательс-
ком режиме выполняются только строки powerfail и power-
wait.
Если процессом init получен запрос на изменение уровня
выполнения, он посылает сигнал-предупреждение SIGTERM
всем процессам, которые не должны работать на требуемом
уровне выполнения. Затем, выждав 5 секунд, init уничто-
жает их сигналом SIGKILL.
Для формирования подразумеваемого окружения процессов
init читает файл /etc/TIMEZONE.
ФАЙЛЫ
/etc/inittab
/etc/utmp
/etc/wtmp
/etc/TIMEZONE
/dev/console
/dev/syscon
/etc/ioctl.syscon
СМ. ТАКЖЕ
getty(1M), termio(7).
login(1), sh(1), who(1) в Справочнике пользователя.
kill(2), inittab(4), utmp(4) в Справочнике программис-
та.
ДИАГНОСТИКА
Если init обнаружит, что действия, связанные с какой
либо строкой из /etc/inittab, были выполнены более 10
раз за 2 минуты, он делает вывод, что в этой строке
имеется ошибка, и выдает сообщение на системную кон-
соль. Затем он игнорирует строку с ошибкой, пока либо
не пройдет пять минут, либо не придет сигнал от запу-
щенного пользователем init'а. Это предохраняет init от
пожирания системных ресурсов, как в случае описки в
файле inittab, так и в случае неосторожного удаления
программы, упомянутой в /etc/inittab.
|