1

Что происходит, когда я sudo telinit n (n является новым уровнем запуска)? Сканирует ли init /etc/inittab и делает ли то же самое при загрузке системы? Например, если у меня есть

rm:2345:wait:/etc/rc.multi

в моем inittab , и я меняю уровень запуска с 5 на 3. Повторно выполняется /etc/rc.multi или он пропущен?

1 ответ1

2

Я понимаю, что изменение уровней выполнения состоит в том, что init "различает" старый и новый уровни выполнения и запускает / убивает службы, статус которых будет изменен.

В данном примере /etc/rc.multi не будет повторно выполнен, потому что он уже запущен. Если у вас в rm:45:wait:/etc/rc.multi было /etc/inittab и вы переходите с уровня запуска 5 -> 3 -> 5, /etc/rc.multi будет убит (-> 3), а затем начал (-> 5), потому что он не установлен для уровня запуска 3.

Из справочной страницы:

Когда init запрашивается изменить уровень выполнения, он отправляет предупреждающий сигнал SIGTERM всем процессам, которые не определены в новом уровне выполнения. Затем он ждет 5 секунд, прежде чем принудительно завершить эти процессы с помощью сигнала SIGKILL.

/etc/inittab повторно проверяется, как вы описали:

После того, как он породил все указанные процессы, init ждет, пока один из его дочерних процессов не умрет, не получит сигнал сбоя питания или пока telinit не сообщит об этом, чтобы изменить уровень выполнения системы. Когда выполняется одно из трех указанных выше условий, он повторно проверяет файл /etc /inittab. Новые записи могут быть добавлены в этот файл в любое время. Однако init все еще ожидает выполнения одного из трех указанных выше условий.

Всё ещё ищете ответ? Посмотрите другие вопросы с метками .