Команды сопровождения |
init(1M) |
init, telinit - инициализация управления процессами
init - универсальное средство запуска процессов. Его основная задача - создавать процессы на основе информации, находящейся в файле /etc/inittab.
В каждый момент времени система находится на одном из восьми возможных уровней выполнения (run level). Уровень выполнения - это конфигурация программного обеспечения, при которой существует только определенная группа процессов. Процессы, запускаемые процессом init для каждого из этих уровней выполнения, определяются в файле /etc/inittab. Процесс init может работать на одном из восьми уровней выполнения, 0-6, S или s (уровни S и s - идентичны). Уровень выполнения изменяется, когда привилегированный пользователь выполняет процесс /sbin/init. Он посылает соответствующие сигналы исходному процессу init, запущенному операционной системой при загрузке, уведомляющие его о том, на какой уровень выполнения перейти.
При загрузке системы вызывается процесс init и происходит следующее. Сначала он читает файл /etc/default/init для установки переменных среды. Именно на основе информации из этого файла устанавливается переменная TZ (часовой пояс) и переменные, задающие локаль, например, LANG или LC_CTYPE.
Затем процесс init ищет запись initdefault в файле /etc/inittab (см. inittab(4)). Если запись initdefault:
Если начальный уровень выполнения:
Если это первый, после включения питания, переход процесса init на уровень выполнения, отличный от однопользовательского, процесс init сначала ищет в файле /etc/inittab записи boot и bootwait (см. inittab(4)). Эти записи выполняются до любой другой обработки файла /etc/inittab, если уровень выполнения, на который выполняется переход, соответствует уровню, указанному в такой записи. Таким образом, любая специфическая инициализация операционной системы, например, монтирование файловых систем, может быть выполнена до того, как в системе зарегистрируются пользователи. Затем процесс init просматривает файл /etc/inittab и выполняет все остальные записи, соответствующие данному уровню выполнения.
Чтобы запустить все процессы в /etc/inittab, процесс init читает записи, и для каждой записи, которую необходимо перезапустить, он порождает дочерний процесс. После порождения всех процессов, указанных в файле /etc/inittab, процесс init ждет, пока не завершит работу один из порожденных им процессов, пока не поступит сигнал powerfail или сигнал от другого процесса init или telinit, требующий изменить уровень выполнения системы. В любом из этих случаев, процесс init перечитывает файл /etc/inittab.
Новые записи можно добавлять в файл /etc/inittab в любой момент; однако, процесс init будет ждать наступления одного из перечисленных выше условий, прежде чем перечитывать файл /etc/inittab. Чтобы обойти это, выполните команду init Q или init q, требующую от процесса init немедленно перечитать файл /etc/inittab.
При запуске init в момент начальной загрузки и при любом переходе системы из однопользовательского состояния на другой уровень выполнения, init устанавливает параметры состояния ioctl(2) в режимы, сохраненные в файле /etc/ioctl.syscon. Процесс init записывает данные в этот файл при каждом переходе в однопользовательский режим.
Когда делается запрос на изменение уровня выполнения системы, процесс init посылает предупреждающий сигнал (SIGTERM) всем процессам, не определенным на заданном уровне выполнения. Процесс init ждет пять секунд, прежде чем принудительно завершать работу этих процессов посылкой им сигнала SIGKILL.
Когда процесс init получает сигнал о том, что порожденный им процесс прекратил существование, он записывает информацию об этом событии и его причине в файлы /var/adm/utmpx и /var/adm/wtmpx, если они существуют (см. who(1)). Хронология порождения процессов записывается в файл /var/adm/wtmpx.
Если процесс init получает сигнал о сбое питания (SIGPWR), он ищет в файле /etc/inittab специальные записи типа powerfail и powerwait. Соответствующие этим записям процессы запускаются (если позволяет уровень выполнения) перед выполненгием любой дальнейшей обработки. За счет этого процесс init может выполнить необходимые действия по завершению работы операционной системы и записи информации при отключении питания.
Для перечисленных ниже переменных в файле /etc/default/init можно задать стандартные значения. Например: TZ=US/Pacific
Команда telinit, связанная с /sbin/init, используется для управления действиями init. Она принимает односимвольный аргумент и требует от init выполнить соответствующее действие.
Для управления сеансом init использует модули pam(3PAM). Правила конфигурирования PAM, перечисленные в файле /etc/pam.conf, задают, какой модуль управления сеансом должен использоваться для init. Вот строка из файла pam.conf, задающая для init использование модуля управления сеансом UNIX.
init session required /usr/lib/security/pam_unix.so.1
Если для службы init отдельной записи нет, будет использована запись для службы "other".
0 | Перейти в режим микропрограммного обеспечения. |
1 | Перевести систему в редим системного администрирования. При этом все локальные файловые системы смонтированы. Работает только небольшой набор сущесвтенных процессов ядра. Этот режим предназначен для решения административных задач, например, установки дополнительных пакетов. Все файлы доступны, и никакие пользователи в системе не зарегистрированы. |
2 | Перевести систему в многопользовательский режим. Запускаются все необходимые для работы многопользовательской среды процессы и демоны. Это сотояние обычно называют многопользовательским. |
3 | Расширить многопользовательский режим, предоставляя доступ по сети к локальным ресурсам. |
4 | Можно определять как альтернативную конфигурацию многопользовательской среды. Этот уровень выполнения не обязателен для работы системы и обычно не используется. |
5 | Остановить машину так, что можно безопасно отключать питание. Если возможно, требует от машины автоматически выключить питание. |
6 | Остановить операционную систему и перезагрузить ее в состояние, задаваемое записью initdefault в файле /etc/inittab. |
a, b, c | Обработать только записи файла /etc/inittab, соответствующие уровню выполнения a, b или c. Это псевдосостояния, которые можно задавать для запуска определенных команд без изменения текущего уровня выполнения. |
Q, q | Перечитать файл /etc/inittab. |
S, s | Перейти в однопользовательский режим. Это единственный уровень выполнения, не требующий наличия файла /etc/inittab соответствующего формата. Если этот файл не существует, по умолчанию, единственным допустимым уровнем выполнения, на который может перейти процесс init является однопользовательский. При работе в однопользовательском режиме будут смонтированы файловые системы, необходимые для выполнения базовых действий в системе. При переходе в однопользовательский режим с более высоого уровня эти файловые системы остаются смонтированными (даже если предоставляются удаленным файловым сервером), и все прочие локальные файловые системы тоже останутся смонтированными. При переходе в однопользовательский режим с более высокого уровня, все процессы, запущенные процессом init или сценариями в каталоге init.d, которые должны работать только в многопользовательском режиме, завершаются ("убиваются"). Кроме того, завершаются все процессы, для которых есть запись utmpx. Это последнее условие гарантирует, что все мониторы портов, запущенные системой SAC, завершаются, как и все службы, запущенные этими мониторами портов, в том числе, службы регистрации ttymon. |
Описание следующих атрибутов см. на странице справочного руководства attributes(5):
ТИП АТРИБУТА | ЗНАЧЕНИЕ АТРИБУТА |
Доступен в пакете | SUNWcsu |
Если процесс init обнаруживает, что перезапускает запись из файла /etc/inittab более десяти раз за две минуты, предполагается, что в командной строке этой записи есть ошибка, и об этом выдается сообщение на системную консоль. Затем эта запись больше не будет запускаться повторно,пока не пройдет пять минут или не будет получен сигнал от запущенного пользователем процесса init или telinit. Это предотвращает напрасное использование ресурсов системы процессом init в случае опечатки в файле inittab или удаления программы, на которую ссылается запись в файле /etc/inittab.
Процессы init и telinit может запускать только привилегированный пользователь.
Следует избегать бессистемного использования уровней выполнения S и s в файле /etc/inittab. При изменении этого файла, лучше избегать добавления этого состояния в любые строки, кроме initdefault.
Если стандарное состояние не указано с помощью записи initdefault в файле /etc/inittab, система переходит на уровень 6. Как следствие, система зациклится и будет постоянно перезагружаться.
Если при загрузке системы не удается создать файл utmpx, система загрузиться в состояние "s", независимо от состояния, указанного в записи initdefault файла /etc/inittab. Это может произойти при недоступности файловой системы /var.
Последнее изменение: 22 февраля 1999 года
Copyleft (no c) 2003 В. Кравчук, OpenXS Initiative, перевод на русский язык
Закладки на сайте Проследить за страницей |
Created 1996-2024 by Maxim Chirkov Добавить, Поддержать, Вебмастеру |