Comment puis-je tuer une fenêtre X spécifique

9

É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?

user123456
la source

Réponses:

10

En plus de répertorier le PID comme décrit dans d'autres réponses de Florian Diesch et Serg, vous pouvez utiliser l' -icoption pour fermer directement la fenêtre:

$ wmctrl -ic 0x02e00085
Nykakin
la source
3
Si le processus est bloqué, il se peut que vous ne remarquiez pas que vous avez fermé la fenêtre. La fenêtre aura disparu, mais le processus sera toujours là et consommera peut-être CPU et RAM.
kasperd
9

Si vous utilisez wmctrl -lples 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)

Florian Diesch
la source
Peut-être plus propre au lieu de awk que vous pouvez simplement utilisercol3 .
Pablo Bianchi
8

wmctrla en fait un autre indicateur -ppour 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
Sergiy Kolodyazhnyy
la source
6

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 -cferme 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 -lpavec killest 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.

  • xkillpeut 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.

Aléatoire832
la source
1

utiliser xkill. Tapez simplement xkillvotre terminal et cliquez sur la fenêtre souhaitée.

xkill

Abhishek Dhanraj Shahdeo
la source