Мое понимание изменения уровней выполнения состоит в том, что 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 все еще ожидает выполнения одного из трех указанных выше условий.