Страницы

Поиск по вопросам

понедельник, 15 июля 2019 г.

Может ли одновременно использоваться две системы инициализации?

У меня Linux Mint 17.3 .
Некоторые из демонов инициализируются при помощи init, некоторые при помощи upstart.
К примеру, демон Preload у меня запускается при помощи init. Ссылка присутствует в /etc/rcN.d, а его config файл для upstart отсутствует. Также в выводе команды initctl list демон preload отсутствует. При всем этом service preload status говорит что preload is running
Но такие демоны как mdm не имеют ссылок на себя в /etc/rcN.d, но имеют config файлы для upstart в /etc/init. И тоже запускаются при старте.
Вопрос: как так получается? Ведь процесс инициализации получает PID 1. Кажется ведь что он должен быть только один.


Ответ

К примеру, демон Preload у меня запускается при помощи init
да, с «помощью» программы /sbin/init, которая, как вы можете видеть, в вашем случае принадлежит пакету upstart
ею же и выполняются команды из конфигурацинных файлов /etc/init/*. один из них — это /etc/init/rc.conf (понятно, тоже из пакета upstart), в котором запускается скрипт /etc/init.d/rc (из пакета sysv-rc, который собирается из тех же исходников, что и пакет sysvinit), который, уже в свою очередь, выполняет нужные файлы (точнее, symlink-и) из соответствующих каталогов /etc/rc?.d/, передавая параметрами start либо stop
Также в выводе команды initctl list демон preload отсутствует
в этом списке отнюдь не «демоны» перечислены, а (цитирую) «known jobs and instances». см. описание команды list в man initctl
При всем этом service preload status говорит что preload is running
если вы заглянете в файл /usr/sbin/service (из пакета sysvinit-utils, который тоже собирается из тех же исходников, что и sysvinit), то увидите, что, при необходимости, он «забирается» в тот самый каталог /etc/init.d/, ищет там соответствующий файл и запускает его с переданным параметром (в данном случае — status).
как так получается? Ведь процесс инициализации получает PID 1. Кажется ведь что он должен быть только один.
«как так получается» я, надеюсь, растолковал выше.
по поводу процесса «номер 1»: это единственный процесс, который запускает непосредственно программа linux (и при внезапном завершении которого программа linux «впадает» в kernel panic). да, вполне логично, что именно этот процесс при запуске осуществляет дальнейшие необходимые для работы операционной системы операции. в частности, запускает всяких разных «демонов». а что именно запускается — зависит от логики работы этой программы и от её текущей конфигурации. и процесс этот (по крайней мере в начале) — «лавинообразный»: та или иная запущенная программа может порождать запуск ещё кучи других программ и так далее.
в принципе, ничто не мешает вам, к примеру, указать программе linux параметр init=/bin/bash, дождаться приглашения оболочки, и вручную запустить всё, что вам необходимо: и программу preload, и все прочие сервисы, и получить в итоге практически точно так же функционирующую систему, как будто вместо вас всем этим занималась программа /sbin/init (и запущенные ею программы).

дополнение
вероятно, не совсем правильно называть процесс номер 1 «процессом инициализации». этот процесс занимается не только инициализацией, но и принимает самое непосредственное участие как в дальнейшей работе операционной системы (например, тот же самый sysv-стильный переход между runlevel-ами) так и в завершении её работы.

Комментариев нет:

Отправить комментарий