Ich verstehe das Ändern von Runlevels so, dass init
das alte und das neue Runlevel "differenziert" wird und Dienste gestartet / beendet werden, deren Status geändert wird.
Im angegebenen Beispiel /etc/rc.multi
würde es nicht erneut ausgeführt werden, da es bereits läuft. Wenn Sie rm:45:wait:/etc/rc.multi
in Ihrem /etc/inittab
, und von Runlevel 5 -> 3 -> 5 gegangen /etc/rc.multi
wären, würde getötet (-> 3) und dann gestartet (-> 5), weil es nicht für Runlevel 3 festgelegt ist.
Aus der Manpage :
Wenn init aufgefordert wird, den Runlevel zu ändern, sendet es das Warnsignal SIGTERM an alle Prozesse, die im neuen Runlevel nicht definiert sind. Dann wartet er 5 Sekunden, bevor er diese Prozesse über das SIGKILL-Signal zwangsweise beendet.
/etc/inittab
wird wie beschrieben erneut gescannt:
Nachdem alle angegebenen Prozesse gestartet wurden, wartet init, bis einer seiner abgeleiteten Prozesse stirbt, ein Power-Fail-Signal oder bis es von telinit signalisiert wird, den Runlevel des Systems zu ändern. Wenn eine der drei oben genannten Bedingungen eintritt, wird die Datei / etc / inittab erneut geprüft. Zu dieser Datei können jederzeit neue Einträge hinzugefügt werden. Init wartet jedoch noch auf das Eintreten einer der drei oben genannten Bedingungen.