Ich versuche, ArchLinux mit GNOME Shell ordnungsgemäß herunterzufahren / neu zu starten. Wenn ich jetzt nach dem Herunterfahren frage, wird es sofort heruntergefahren, ohne dass geöffnete Programme Zeit zum ordnungsgemäßen Schließen / Speichern geöffneter Dateien haben. Wenn ich Chrome neu starte (zum Beispiel), wird mir dadurch mitgeteilt, dass die Sitzung nicht ordnungsgemäß geschlossen wurde. Durch das Lesen im Internet habe ich erfahren, dass systemd beim Herunterfahren von Prozessen zuerst ein SIGTERM
gefolgt von sendet, SIGKILL
wenn der Prozess nicht geschlossen wird mit einer bestimmten Auszeit. Allerdings stelle ich fest, dass auf meinem System SIGKILL
sofort danach gesendet wird SIGTERM
und ich vermute, dass dies die Ursache für einen nicht ordnungsgemäßen Programmabbruch ist.
Ich habe eine Dokumentation gefunden, in der (wenn ich sie richtig gelesen habe) angegeben ist, dass das Zeitlimit vor dem Senden SIGKILL
per TimeoutStopSec=
Option festgelegt werden kann. Das Senden SIGKILL
kann auch SendSIGKILL=
optional deaktiviert werden . Aber ich kann nicht finden, wo ich diese Optionen konfigurieren soll ... Gibt es eine Konfigurationsdatei zum Herunterfahren / Neustarten des Systems, in der ich diese Optionen festlegen kann?
BEARBEITEN:
Ich habe einige Tests gemacht und zwei interessante Dinge entdeckt:
- Wenn ich Chrome auf diese Weise manuell schließe
killall -SIGTERM chrome
, wird nicht beanstandet, dass es beim nächsten Neustart nicht ordnungsgemäß geschlossen wurde. Wenn ich es stattdessen so schließekillall -SIGKILL chrome
, wird es sich beschweren. Dies sagt mir, dass Chrom SIGTERM richtig handhabt. - Wenn ich die Ausgabe meines Herunterfahrvorgangs betrachte, druckt systemd
Sending SIGTERM...
sofort, gefolgt vonSending SIGKILL...
Laut dem folgenden Kommentar behandelt systemd nur seine Prozesse. Also in meinem Fall GDM. Dies sagt mir, dass das Problem sein könnte:
- Entweder schließt GDM die untergeordneten Prozesse (z. B. Chrome) nicht korrekt (z. B. indem SIGTERM an sie gesendet wird).
- oder systemd sendet GDM eine SIGKILL-Nachricht zu früh, damit es nicht die Zeit hat, seine untergeordneten Elemente ordnungsgemäß zu schließen.
Gibt es eine Möglichkeit zu überprüfen / konfigurieren, wie GDM seine Kinder tatsächlich schließt?
quelle
systemd's
Kontrolle sein -systemd
istpid 1
-, aber Chrome führt sein Wrapper-Skript in einer Subshell aus und ruft anschließend untergeordnete Prozesse auf. Dennoch wird es tun, was es braucht, um es zu beendenzygotes
, solange Ihr System richtig konfiguriert ist. Verwenden Sie eine der im Arch-Wiki empfohlenen temporären Lösungen für Chrome?gnome-session
.Antworten:
Um Ihren Desktop ordnungsgemäß herunterzufahren, müssen Sie möglicherweise den
TimeoutStopSec=
Wert für GDM oder einen anderen von Ihnen verwendeten Anzeigemanager erhöhen .quelle
Dies funktionierte für mich auf meinem Arch Linux mit Gnome 3.12. Es stellte sich heraus, dass es möglicherweise mit der Konfiguration in Verbindung steht
/etc/gdm/PostSession/Default
.Führen Sie aus
sudo pacman -S wmctrl
, um wmctrl für die Windows-Verwaltung zu installieren.Erstellen Sie eine ausführbare Datei zum Schließen aller Fenster. Zum Beispiel habe ich es
/home/[your_username]/bin/close-all-windows
mit diesen Inhalten eingefügt:Ändern
/etc/gdm/PostSession/Default
Sie diese Inhalte und fügen Sie sie hinzu, bevor Sieexit 0
:Hoffe das wird funktionieren.
quelle
Das wmctrl-Skript von sorpass funktioniert gut für mich (auf CentOS 7 musste ich erst 'yum install wmctrl' ausführen). Allerdings stellte ich fest, dass / etc / gdm / PostSession / Default nur beim Abmelden zu laufen schien, nicht beim Herunterfahren. Anstatt / etc / gdm / PostSession / Default zu verwenden, rufe ich jetzt das wmctrl-Skript von sorpass aus dem Python-Skript von Seamus Phelan auf, das an diesen beiden Standorten zu finden ist:
Diese Kombination von Skripten eignet sich hervorragend zum automatischen und sauberen Schließen von Firefox, Chrome usw., wenn ich mich von meinem CentOS 7-Desktop-Computer abmelde oder ihn herunterfahre. Beachten Sie, dass Sie unter CentOS 7 'yum install gnome-python2-gnome' ausführen müssen, damit dieses Python-Skript funktioniert.
quelle