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.