web-dev-qa-db-fra.com

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

Étant donné les identifiants produits par wmctrl -l, j’aimerais pouvoir arrêter le processus lié à l’identifiant de fenêtre.

Comment suggéreriez-vous de le faire?

9
user123456

Outre l’énumération du PID comme décrit dans d’autres réponses de Florian Diesch et Serg, vous pouvez utiliser l’option -ic pour fermer la fenêtre directement:

$ wmctrl -ic 0x02e00085
10
Nykakin

Si vous utilisez wmctrl -lp, les PID figurent dans la troisième colonne.

Pour un identifiant de fenêtre donné, vous pouvez utiliser

kill $(wmctrl -lp | awk '/^WID/ {print $3}')

(remplacez WID par votre identifiant de fenêtre)

9
Florian Diesch

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 consistant à extraire le PID de cette fenêtre et à le transmettre à kill

wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
8

Vous pouvez également utiliser xkill -id [id]. L'utilitaire xkill fonctionne différemment des autres réponses: au lieu de fermer la fenêtre ou de tuer directement le processus, il demande au serveur X de déconnecter le client qui a créé la fenêtre. Cela a normalement pour effet de provoquer la fin 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 et même ne pas fermer la fenêtre si l'application ne veut pas que la fenêtre soit fermée ou est gelée.

  • L'utilisation du pid de wmctrl -lp avec kill interrompt le processus, mais peut nécessiter du travail supplémentaire ou ne pas fonctionner du tout si le processus s'exécute sur un autre ordinateur.

  • xkill ne peut pas mettre fin au 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 vont simplement planter dans ces circonstances. En tout cas, les fenêtres auront disparu. Et les processus distants et locaux sont traités de manière identique.

6
Random832

utilisez xkill. Il suffit de taper xkill dans votre terminal et de cliquer sur la fenêtre souhaitée.

xkill