Étant donné les identifiants produits par wmctrl -l
, j'aimerais pouvoir tuer le processus lié à l'identifiant de la fenêtre.
Comment proposeriez-vous de le faire?
Étant donné les identifiants produits par wmctrl -l
, j'aimerais pouvoir tuer le processus lié à l'identifiant de la fenêtre.
Comment proposeriez-vous de le faire?
Réponses:
En plus de répertorier le PID comme décrit dans d'autres réponses de Florian Diesch et Serg, vous pouvez utiliser l' -ic
option pour fermer directement la fenêtre:
$ wmctrl -ic 0x02e00085
Si vous utilisez wmctrl -lp
les PID se trouvent dans la troisième colonne.
Pour un ID de fenêtre donné, vous pouvez utiliser
kill $(wmctrl -lp | awk '/^WID/ {print $3}')
(remplacez WID par votre identifiant de fenêtre)
col3
.
wmctrl
a en fait un autre indicateur -p
pour lister le PID.
bash-4.3$ wmctrl -lp
0x0380000a 0 4410 eagle Desktop
0x04800006 0 4275 eagle XdndCollectionWindowImp
0x04800009 0 4275 eagle unity-launcher
0x0480000c 0 4275 eagle unity-panel
0x0480000f 0 4275 eagle unity-dash
0x04800010 0 4275 eagle Hud
Une fois que vous savez cela, c'est un exercice trivial d'extraire le PID de cette fenêtre et de le transmettre à kill
wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
Vous pouvez également utiliser xkill -id [id]
. L' utilitaire xkill fonctionne différemment des autres réponses - plutôt que de fermer la fenêtre ou de tuer le processus directement, il demande au serveur X de déconnecter le client qui a créé la fenêtre. Cela a normalement pour effet de provoquer l'arrêt du processus même pour un processus distant.
Avantages et inconvénients de chaque approche:
wmctrl -c
ferme une fenêtre "gracieusement" - comme si vous aviez cliqué vous-même sur le bouton de fermeture du gestionnaire de fenêtres. Cela peut ne pas tuer le processus, ni même fermer la fenêtre, si l'application ne souhaite pas que la fenêtre soit fermée ou est gelée.
L'utilisation du pid à partir de wmctrl -lp
avec kill
est garantie pour tuer le processus, mais peut nécessiter un travail supplémentaire ou ne pas fonctionner du tout si le processus s'exécute sur une autre machine.
xkill
peut ne pas terminer le processus, s'il est conçu pour pouvoir récupérer d'un crash du serveur X ou d'une perte de connectivité réseau, mais la plupart des applications se bloqueront simplement dans ces circonstances. Dans tous les cas, les fenêtres auront disparu. Et les processus distants et locaux sont traités de manière identique.
utiliser xkill
. Tapez simplement xkill
votre terminal et cliquez sur la fenêtre souhaitée.
xkill