Comment fermer l'application du terminal de la même manière que la fermer correctement

9

Habituellement, lorsque vous exécutez une application dans un environnement graphique, lorsque je veux la fermer, je clique Xdans le coin supérieur gauche de la fenêtre ou je vais File > Close.

Je voudrais parfois fermer ces programmes à distance via ssh à partir du terminal en utilisant la ligne de commande, maintenant j'utilise la killcommande mais je me demande si cela fait la même chose que de quitter correctement l'application de lui-même.

Du man killsignal par défaut semble être 15) SIGTERM, ce signal va-t-il dire à l'application que j'essaie de fermer pour nettoyer, fermer les fichiers ouverts, enregistrer des trucs?

Y a-t-il un meilleur moyen si je veux le faire depuis le terminal?

Mike
la source
2
Merci d'avoir posé la question! J'ai appris quelque chose qui sera sûrement utile à un moment donné.
Oliphaunt - réintègre Monica le

Réponses:

9

La façon typique de fermer l'application avec élégance est d'utiliser kill -TERM 1234, où 1234est le PID de la fenêtre. Le problème, cependant, est que les applications graphiques sont conçues pour écouter un signal spécifique du serveur X lui-même, et non pour écouter le TERMsignal.

Cela signifie que vous auriez besoin d'une sorte d'agent entre vous et le serveur X pour communiquer que vous souhaitez envoyer le signal approprié. Vous pouvez bien sûr écrire un programme C, mais il existe déjà un wmctrlprogramme (écrit sans surprise en C) qui fait exactement cela.

L'utilisation de wmctrlest simple:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Il n'est pas installé par défaut, alors obtenez-le avec sudo apt-get install wmctrl

Il y a de nombreuses utilisations pour wmctrlbien au-delà de la fermeture de fenêtres, alors veuillez consulter plus de mes réponses et celles de Jacob Vlijm pour des exemples de scripts où il a été utilisé.

Sergiy Kolodyazhnyy
la source
2
Il suffit d'ajouter ici qui wmctrl -llistera toutes les fenêtres et donnera l'identifiant numérique en hexadécimal dans la première colonne. =)
Terrance
Merci, fonctionne très bien avec la plupart des applications, mais avec Deluge il y a une option Minimize to tray on closeet wmctrl -cfermera simplement une fenêtre, pas l'application elle-même, elle restera en cours d'exécution minimisée dans la barre d'état.
Mike
3

Je pense qu'il vaut la peine d'ajouter que cela wmctrl -xlproduira des résultats comme celui-ci:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Où le xdemande que la classe de fenêtre soit dans la sortie. C'est souvent la façon la plus simple de fermer le même programme à chaque fois. Ensuite, nous pouvons simplement fournir la classe window lors de sa fermeture:

wmctrl -xc speedcrunch.Speedcrunch

Cet exemple fermera speedcrunch.

Daniel Centore
la source