Was bedeutet "Runlevel wechseln" genau?

805
xiaq

Was passiert bei der Ausgabe sudo telinit n(n ist das neue Runlevel)? Hat initScans /etc/inittabund tut genau das gleiche, wenn das System gebootet wird? Zum Beispiel, wenn ich habe

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

in meinem inittab, und ich wechsle den Runlevel von 5 auf 3. Wird /etc/rc.multies erneut ausgeführt oder wird es übersprungen?

1

1 Antwort auf die Frage

2
BigChief

Ich verstehe das Ändern von Runlevels so, dass initdas alte und das neue Runlevel "differenziert" wird und Dienste gestartet / beendet werden, deren Status geändert wird.

Im angegebenen Beispiel /etc/rc.multiwürde es nicht erneut ausgeführt werden, da es bereits läuft. Wenn Sie rm:45:wait:/etc/rc.multiin Ihrem /etc/inittab, und von Runlevel 5 -> 3 -> 5 gegangen /etc/rc.multiwä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.

Die Manpage sagte: "Sie sendet das Warnsignal SIGTERM an alle Prozesse, die im neuen Runlevel undefiniert sind". Was ist mit den Kindern eines Prozesses (sagen wir Programm `/ bin / foo`), der in` inittab` spezifiziert ist? Ich vermute, dass init den gesamten von `/ bin / foo` erzeugten Baum als Ganzes behandelt, aber die Manpage ist verwirrend und wie kann ich meine Hypothese beweisen? xiaq vor 13 Jahren 0
@xiaq: Es heißt: "Beachten Sie, dass init davon ausgeht, dass alle diese Prozesse (und ihre Nachkommen) in derselben Prozessgruppe verbleiben, die init ursprünglich für sie erstellt hat. Wenn ein Prozess seine Zugehörigkeit zu einer Prozessgruppe ändert, empfängt er diese Signale nicht." Solange die Prozessgruppe gleich bleibt, sollte sie diese auch töten. Um es auszuprobieren, können Sie eine Dummy-Anwendung erstellen, die sich ein paar Mal gabelt, zu `inittab` hinzufügen und versuchen, den Runlevel zu ändern, um zu sehen, ob auch die Kinder sterben. BigChief vor 13 Jahren 0
Es tut mir leid, aber was bedeutet "Prozessgruppe"? xiaq vor 13 Jahren 0
@xiaq: Wie hier beschrieben (http://en.wikipedia.org/wiki/Process_group), ist eine Prozessgruppe grundsätzlich eine Möglichkeit, Signale (wie SIGTERM) gleichzeitig auf mehrere Prozesse zu verteilen. Standardmäßig befinden sich alle untergeordneten Prozesse in der Gruppe ihrer übergeordneten Elemente und somit auf dem kaskadierenden Verhalten, wenn Sie einen SIGTERM / SIGKILL an den Prozess der obersten Ebene senden. In diesem Fall kann init alle untergeordneten Prozesse eines Dienstes unterdrücken, ohne sie explizit zu verfolgen. BigChief vor 13 Jahren 0
+1 Sie könnten die Laienbedeutung der Runlevel auflisten - 1 ist ein einzelner Benutzer (`root '), 4 ist` XOrg` und so weiter. new123456 vor 13 Jahren 0
@ new123456 Sorry, aber was bedeutet "Laienbedeutung"? (Ich bin kein Muttersprachler.) Und übrigens, 5 ist XOrg. xiaq vor 13 Jahren 0
@xiaq - [Definition] (http://dictionary.reference.com/browse/layman). Du findest dictionary.com sehr hilfreich für Wörter :) Außerdem kann ich sagen, dass du Zenwalk nicht ausführst - auf Zenwalk ist 4 * is * XOrg. new123456 vor 13 Jahren 0
@ new123456: @xiaq hat nicht nach den Runlevel-Definitionen gefragt, sondern nur nach dem Verhalten des Runlevel-Switches nach dem Booten, daher sehe ich die Notwendigkeit nicht. Und es sieht so aus, als kenne er sie schon. BigChief vor 13 Jahren 1
Anscheinend ist meine ursprüngliche Frage jetzt vollständig beantwortet, also akzeptiere ich diese Antwort. Noch ist mir der Kontrollfluss von "init" in Bezug auf "inittab" nicht klar und ich brauche weitere Erklärungen. Ich habe eine weitere Frage [hier] geöffnet (http://superuser.com/questions/277309/control-flow-of-systemv-style-init). xiaq vor 13 Jahren 0