¿Cómo puedo matar una ventana X específica?

9

Dadas las ID producidas por wmctrl -l, me gustaría poder matar el proceso vinculado a la ID de la ventana.

¿Cómo sugerirías hacerlo?

usuario123456
fuente

Respuestas:

10

Además de enumerar el PID como se describe en otras respuestas de Florian Diesch y Serg, puede usar la -icopción para cerrar la ventana directamente:

$ wmctrl -ic 0x02e00085
Nykakin
fuente
3
Si el proceso está atascado, es posible que no note que cerró la ventana. La ventana desaparecerá, pero el proceso seguirá allí y posiblemente consumirá CPU y RAM.
Kasperd
9

Si usa wmctrl -lplos PID, están en la tercera columna.

Para una ID de ventana determinada, puede usar

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

(reemplace WID con su ID de ventana)

Florian Diesch
fuente
Tal vez más limpio en lugar de awk puede usarcol3 .
Pablo Bianchi
8

wmctrlen realidad tiene otra bandera -ppara listar 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

Una vez que sepa esto, es un ejercicio trivial de extraer el PID de esa ventana y pasarlo a kill

wmctrl -lp | awk '/Window Title/{print $3}' | xargs kill
Sergiy Kolodyazhnyy
fuente
6

También puedes usar xkill -id [id]. La utilidad xkill funciona de manera diferente a las otras respuestas: en lugar de cerrar la ventana o eliminar el proceso directamente, le indica al servidor X que desconecte al cliente que creó la ventana. Esto normalmente tiene el efecto de hacer que el proceso finalice incluso para un proceso remoto.

Ventajas y desventajas de cada enfoque:

  • wmctrl -ccierra una ventana "con gracia", como si usted mismo hubiera hecho clic en el botón Cerrar del administrador de ventanas. Esto puede no matar el proceso, y puede que ni siquiera cierre la ventana, si la aplicación no quiere que la ventana se cierre o se congele.

  • El uso de pid from wmctrl -lpwith killestá garantizado para matar el proceso, pero puede requerir trabajo adicional o no funcionar en absoluto si el proceso puede ejecutarse en una máquina diferente.

  • xkilles posible que no finalice el proceso si está diseñado para poder recuperarse de un bloqueo del servidor X o pérdida de conectividad de red, pero la mayoría de las aplicaciones simplemente se bloquean en estas circunstancias. En cualquier caso, las ventanas se habrán ido. Y los procesos remotos y locales se manejan de manera idéntica.

Aleatorio832
fuente
1

uso xkill. Simplemente escriba xkillsu terminal y haga clic en la ventana requerida.

xkill

Abhishek Dhanraj Shahdeo
fuente