В Unix -based компьютерах операционных системах, init (сокращение от инициализации) - это первый процесс, запущенный во время загрузки компьютерной системы. Init - это процесс демона, который продолжает работать, пока система не будет выключена. Он является прямым или косвенным предком всех других процессов и автоматически принимает все потерянные процессы. Init запускается ядром во время процесса загрузки ; Если ядро не сможет запустить его, произойдет паника ядра. Init обычно присваивается идентификатор процесса 1.
В системах Unix, таких как System III и System V, конструкция init отличается от функциональности, предоставляемой init в Research Unix и его BSD производные. До недавнего времени в большинстве дистрибутивов Linux использовался традиционный init, который в некоторой степени совместим с System V, в то время как некоторые дистрибутивы, такие как Slackware, используют сценарии запуска в стиле BSD, а другие, такие как Gentoo имеет свои собственные версии.
С тех пор было создано несколько дополнительных реализаций инициализации, пытающихся устранить ограничения дизайна в традиционных версиях. К ним относятся launchd, Service Management Facility, systemd, Runit и OpenRC.
Research Unix init запустил инициализационный сценарий оболочки, расположенный в / etc / rc
, затем запустил getty на терминалах под управлением / etc / ttys
. Нет уровней запуска; файл / etc / rc
определяет, какие программы запускаются init. Преимущество этой системы в том, что ее легко редактировать вручную. Однако новое программное обеспечение, добавленное в систему, может потребовать изменений в существующих файлах, что может привести к невозможности загрузки системы.
BSD init был до 4.3BSD таким же, как init для Research UNIX; в 4.3BSD добавлена поддержка запуска оконной системы, такой как X, на графических терминалах под управлением / etc / ttys
. Чтобы удалить требование редактировать / etc / rc
, варианты BSD уже давно поддерживают файл /etc/rc.local
для конкретного сайта, который запускается во вспомогательной оболочке ближе к концу последовательности загрузки.
Полностью модульная система была представлена с NetBSD 1.5 и портирована на FreeBSD 5.0 и последующие версии. Эта система выполняет сценарии в каталоге /etc/rc.d
. В отличие от порядка скриптов в System V, который определяется именем файла каждого скрипта, эта система использует явные теги зависимости, размещенные внутри каждого скрипта. Порядок, в котором выполняются сценарии, определяется сценарием rcorder на основе требований, указанных в этих тегах.
По сравнению со своими предшественниками, UNIX System III от ATT представила новый стиль конфигурации запуска системы, который сохранился (с модификациями) в UNIX System V и поэтому называется "инициализацией в стиле SysV".
В любой момент работающая Система V находится в одном из заранее определенного количества состояний, называемых уровнями выполнения. По крайней мере, один уровень выполнения - это нормальное рабочее состояние системы; обычно другие уровни выполнения представляют однопользовательский режим (используемый для восстановления неисправной системы), завершение работы системы и различные другие состояния. При переключении с одного уровня запуска на другой запускается набор сценариев для каждого уровня запуска, которые обычно монтируют файловые системы, запускают или останавливают демоны, запускают или останавливают X Window System, завершают работу машина и т. д.
Уровни выполнения в System V описывают определенные состояния машины, характеризующиеся процессами и демонами, запущенными в каждом из них. В общем, существует семь уровней выполнения, из которых три уровня выполнения считаются «стандартными», поскольку они важны для работы системы:
Помимо этих стандартных, Unix и Unix-подобные системы несколько по-разному относятся к уровням запуска. Общий знаменатель, файл / etc / inittab
, определяет, что каждый настроенный уровень запуска делает в данной системе.
Операционная система | Уровень запуска по умолчанию |
---|---|
AIX | 2 |
antiX | 5 |
Gentoo Linux | 3 |
HP-UX | 3 (консоль / сервер / многопользовательский) или 4 (графическое) |
Linux с нуля | 3 |
Slackware Linux | 3 |
Solaris / illumos | 3 |
UNIX System V Releases 3.x, 4.x | 2 |
UnixWare 7.x | 3 |
В дистрибутивах Linux, для которых по умолчанию используется уровень запуска 5 в таблице справа, уровень запуска 5 вызывает многопользовательскую графическую среду, в которой работает X Window System, обычно с менеджером отображения как GDM или KDM. Однако операционные системы Solaris и illumos обычно резервируют уровень выполнения 5 для завершения работы и автоматического выключения машины.
В большинстве систем все пользователи могут проверить текущий уровень выполнения с помощью команды runlevel
или who -r
. Пользователь root обычно изменяет текущий уровень выполнения, выполняя команды telinit
или init
. Файл / etc / inittab
устанавливает уровень выполнения по умолчанию с записью : initdefault:
.
В системах Unix изменение уровня выполнения достигается запуском только отсутствующих служб (поскольку каждый уровень определяет только те, которые были запущены / остановлены). Например, изменение системы с уровня запуска 3 на 4 может запустить только локальный X-сервер. Возвращаясь к уровню выполнения 3, он снова будет остановлен.
Традиционно одним из основных недостатков init является то, что он запускает задачи последовательно, ожидая завершения загрузки каждой перед переходом к следующей. Когда процессы запуска заканчиваются блокировкой ввода / вывода (I / O), это может привести к длительным задержкам во время загрузки. Ускорение ввода-вывода, например использование SSD может сократить задержки, но не устраняет основную причину.
Были предприняты различные попытки заменить традиционные демоны инициализации для решения этой и других проблем проектирования, в том числе:
По состоянию на февраль 2019, systemd принят в большинстве основных дистрибутивов Linux.