É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?
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
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)
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
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.
utilisez xkill
. Il suffit de taper xkill
dans votre terminal et de cliquer sur la fenêtre souhaitée.
xkill