Como posso matar uma janela X específica


9

Dados os IDs produzidos por wmctrl -l, eu gostaria de poder eliminar o processo vinculado ao ID da janela.

Como você sugeriria fazer isso?

Respostas:


10

Além de listar o PID conforme descrito em outras respostas de Florian Diesch e Serg, você pode usar a -icopção para fechar a janela diretamente:

$ wmctrl -ic 0x02e00085

3
Se o processo estiver travado, talvez você não note que você fechou a janela. A janela desapareceu, mas o processo ainda estará lá e possivelmente consumirá CPU e RAM.
kasperd

9

Se você usar wmctrl -lpos PIDs, estará na terceira coluna.

Para um determinado ID de janela, você pode usar

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

(substitua WID pelo seu ID da janela)


Talvez limpador, em vez de awk, você possa usarcol3 .
Pablo Bianchi

8

wmctrlna verdade, tem outro sinalizador -ppara listar o 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

Depois que você souber disso, é um exercício trivial extrair o PID dessa janela e passá-lo para kill

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

6

Você também pode usar xkill -id [id]. O utilitário xkill funciona de maneira diferente das outras respostas - em vez de fechar a janela ou interromper o processo diretamente, ele instrui o servidor X a desconectar o cliente que criou a janela. Normalmente, isso causa o término do processo, mesmo para um processo remoto.

Vantagens e desvantagens de cada abordagem:

  • wmctrl -cfecha uma janela "normalmente" - como se você tivesse clicado no botão Fechar do gerenciador de janelas. Isso pode não matar o processo e nem fechar a janela, se o aplicativo não quiser que a janela seja fechada ou esteja congelada.

  • O uso do pid from wmctrl -lpcom killé garantido para matar o processo, mas pode exigir trabalho extra ou não funcionar se o processo estiver em execução em uma máquina diferente.

  • xkillpode não finalizar o processo, se ele foi projetado para recuperar uma falha do servidor X ou perda de conectividade da rede, mas a maioria dos aplicativos simplesmente travará nessas circunstâncias. De qualquer forma, as janelas desaparecerão. E processos remotos e locais são tratados de forma idêntica.


Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.