J'essaie d'obtenir un arrêt / redémarrage gracieux dans ArchLinux avec GNOME Shell. Maintenant, lorsque je demande l'arrêt, il s'arrête immédiatement sans donner aux programmes ouverts le temps de fermer / enregistrer les fichiers ouverts avec élégance. Par conséquent, chaque fois que je redémarre Chrome (par exemple), il me dit que la session n'a pas été fermée correctement, etc. En lisant sur le Web, j'ai appris que systemd lors de l'arrêt des processus, il envoie d'abord un SIGTERM
suivi de SIGKILL
si le processus ne se ferme pas. avec un délai d'attente donné. Cependant, je remarque que mon système SIGKILL
est envoyé immédiatement après SIGTERM
et je suppose que c'est la cause d'une interruption non gracieuse des programmes.
J'ai trouvé une documentation qui (si je la lis correctement) indique que le délai avant l'envoi SIGKILL
peut être défini par TimeoutStopSec=
option. L'envoi SIGKILL
pourrait également être désactivé par SendSIGKILL=
option. Mais je ne trouve pas où configurer ces options ... y a-t-il un fichier de configuration d'arrêt / redémarrage de systemd où je peux définir ces options?
ÉDITER:
J'ai fait quelques tests et j'ai découvert deux choses intéressantes:
- Si je ferme manuellement le chrome comme celui
killall -SIGTERM chrome
-ci, il ne se plaindra pas qu'il n'a pas été correctement fermé la prochaine fois que je le redémarrerai. Si je le ferme comme ça à la placekillall -SIGKILL chrome
, il se plaindra. Cela m'indique que Chrome gère correctement SIGTERM. - En regardant le résultat de ma procédure d'arrêt, systemd imprime
Sending SIGTERM...
immédiatement suivi deSending SIGKILL...
Selon le commentaire ci-dessous, systemd gère uniquement ses processus. Donc dans mon cas GDM. Cela me dit que le problème pourrait être:
- Soit GDM ne ferme pas correctement ses processus enfants (par exemple Chrome) (c'est-à-dire en leur envoyant SIGTERM)
- ou systemd envoie à GDM un message SIGKILL pour ne pas lui donner le temps de fermer correctement ses enfants.
Existe-t-il un moyen de vérifier / configurer la façon dont GDM ferme ses enfants?
la source
systemd's
contrôle -systemd
estpid 1
- mais Chrome exécute son script wrapper dans un sous-shell et appelle ensuite les processus enfants. Pourtant, il fera ce dont il a besoin pour le tuerzygotes
tant que votre système est correctement configuré. Utilisez-vous l'une de ces solutions d'espace temporaire pour Chrome que vous trouverez recommandées dans le wiki Arch?gnome-session
.Réponses:
Pour éteindre gracieusement votre bureau, vous devrez peut-être augmenter le
TimeoutStopSec=
pour GDM, ou tout autre gestionnaire d'affichage que vous utilisez.la source
Cela a fonctionné pour moi sur mon Arch Linux avec Gnome 3.12. Il s'est avéré que cela pouvait être lié à la configuration
/etc/gdm/PostSession/Default
.Exécutez
sudo pacman -S wmctrl
pour installer wmctrl pour la gestion des fenêtres.Créez un fichier exécutable pour fermer toutes les fenêtres. Par exemple, je l'ai mis
/home/[your_username]/bin/close-all-windows
avec ces contenus:Modifiez
/etc/gdm/PostSession/Default
et ajoutez ces contenus avantexit 0
:J'espère que cela fonctionnera.
la source
Le script wmctrl de sorpass fonctionne bien pour moi (sur CentOS 7, je devais d'abord lancer 'yum install wmctrl'). Cependant, j'ai trouvé que / etc / gdm / PostSession / Default ne semblait s'exécuter qu'à la déconnexion, pas à l'arrêt. Par conséquent, au lieu d'utiliser / etc / gdm / PostSession / Default, j'appelle maintenant le script wmctrl de sorpass à partir du script python de Seamus Phelan qui se trouve sur ces deux sites:
Cette combinaison de scripts fonctionne très bien pour fermer Firefox, Chrome, etc. automatiquement et proprement lorsque je me déconnecte ou arrête ma machine de bureau CentOS 7. Notez qu'avec CentOS 7, vous devez exécuter 'yum install gnome-python2-gnome' pour que ce script python fonctionne.
la source