systemd arbeitet intern in einer Warteschlange von "Jobs". Jeder Job (ein wenig vereinfacht) ist eine Aktion, die ausgeführt werden muss: Anhalten, Überprüfen, Starten oder Neustarten einer bestimmten Einheit .
Wenn Sie beispielsweise systemd anweisen, eine Serviceeinheit zu starten , erstellt es eine Liste mit Stopp- und Startaufträgen für die Einheiten (Serviceeinheiten, Mounteinheiten, Geräteeinheiten usw.), die zur Erreichung dieses Ziels erforderlich sind Anforderungen und Abhängigkeiten von Einheiten ordnen sie gemäß den Beziehungen zwischen Einheiten und Ordnungen an, klären (wenn möglich) etwaige Selbstwidersprüche und stellen sie (wenn dieser letzte Schritt erfolgreich ist) in die Warteschlange.
Dann wird versucht, die in die Warteschlange gestellten "Jobs" auszuführen.
Für Sitzung 1 von Benutzer xy wird ein Stoppjob ausgeführt
Der Anzeigename der Einheit lautet hier Session 1 of user xy
. Dies ist (nach dem Anzeigenamen) eine Sitzungseinheit , keine Serviceeinheit . Dies ist die Abstraktion der Anmeldesitzung für den Benutzerbereich, die vom logind
Programm von systemd und seinen PAM-Plug-ins verwaltet wird. Es ist (im Wesentlichen und in der Theorie) eine Gruppierung aller Prozesse, die dieser Benutzer als "Anmeldesitzung" irgendwo ausführt.
Der Job, der in die Warteschlange gestellt wurde, ist stop
. Und es dauert wahrscheinlich lange, weil die System-Leute den Sitzungsabbruch fälschlicherweise mit dem Herunterfahren der Sitzung in Konflikt gebracht haben . Sie brechen die ersteren, um die letzteren zum Arbeiten zu bringen, und als Reaktion darauf ändern einige Leute das System, um die letzteren zu brechen, um die ersteren zum Arbeiten zu bringen. Die systemd Leute sollten wirklich erkennen, dass sie zwei verschiedene Dinge sind.
In Ihrer Anmeldesitzung wird etwas ignoriert SIGTERM
oder es dauert lange, bis es beendet wird, sobald es erkannt wurde SIGTERM
. Ironischerweise ist Ersteres das langjährige Verhalten einiger Job-Control-Shells. Der richtige Weg Anmeldesitzung Führer zu beenden , wenn sie diese speziellen Job-Kontrollschalen ist , ihnen zu sagen , dass die Sitzung wurde aufgehängt , worauf sie alle beenden ihre Arbeitsplätze (eine andere Art von Arbeit an den internen systemd Job) und dann kündigen sich.
Was tatsächlich passiert, ist, dass systemd auf das Stopp-Timeout des Geräts wartet, bis es darauf zurückgreift SIGKILL
. Diese Zeitüberschreitung ist natürlich pro Einheit konfigurierbar und kann so eingestellt werden, dass keine Zeitüberschreitung auftritt. Daher kann man möglicherweise unterschiedliche Verhaltensweisen erkennen.
Weitere Lektüre