Что происходит, когда я выхожу sudo telinit n
(n быть новым runlevel)? Делает init
сканирования /etc/inittab
и точно то же, когда система загружается? Например, если я имею
rm:2345:wait:/etc/rc.multi
в моем inittab
, и я изменяю runlevel с 5 до 3. Делает /etc/rc.multi
будьте повторно выполнены или это пропускается?
Мой понимать изменения runlevels является этим init
"diffs", который старый и новый runlevel и запускает / уничтожает сервисы, состояние которых будет измененный.
В данном примере, /etc/rc.multi
не был бы повторно выполнен, потому что это уже работает. Если Вы имели rm:45:wait:/etc/rc.multi
в Вашем /etc/inittab
, и пошел от runlevel 5-> 3-> 5, /etc/rc.multi
был бы уничтожен (-> 3) и затем запущен (-> 5), потому что это не установлено для runlevel 3.
Когда init требуют изменить runlevel, он отправляет сигналу тревоги SIGTERM во все процессы, которые не определены в новом runlevel. Это затем ожидает за 5 секунд до этого насильственно завершить эти процессы через сигнал SIGKILL.
/etc/inittab
повторно сканируется, как Вы описали:
После того, как это породило все указанные процессы, init ожидает одного из своих порожденных процессов для смерти, сигнал сбоя питания, или пока это не сообщено telinit для изменения runlevel системы. Когда одно из вышеупомянутых трех условий происходит, оно вновь исследует/etc/inittab файл. Новые записи могут быть добавлены к этому файлу в любое время. Однако init все еще ожидает одного из вышеупомянутых трех условий произойти.