Como posso matar uma janela X específica?

9

Dado os IDs produzidos por wmctrl -l , gostaria de poder eliminar o processo vinculado à ID da janela.

Como você sugeriria fazer isso? '

    
por user123456 05.10.2016 / 11:31

5 respostas

10

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

$ wmctrl -ic 0x02e00085
    
por Nykakin 05.10.2016 / 11:54
9

Se você usa wmctrl -lp , os PIDs estão na terceira coluna.

Para um determinado ID de janela, você pode usar

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

(substitua o WID pela sua ID de janela)

    
por Florian Diesch 05.10.2016 / 11:45
8

wmctrl na verdade tem outro sinalizador -p para 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

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

wmctrl -lp | awk '/Window Title/{print }' | xargs kill
    
por Sergiy Kolodyazhnyy 05.10.2016 / 11:46
6

Você também pode usar xkill -id [id] . O utilitário xkill funciona de forma diferente das outras respostas - em vez de fechar a janela ou matar o processo diretamente, ele instrui o servidor X para desconectar o cliente que criou a janela. Isso normalmente tem o efeito de fazer com que o processo termine mesmo para um processo remoto.

Vantagens e desvantagens de cada abordagem:

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

  • Usar o pid de wmctrl -lp com kill garante matar o processo, mas pode exigir trabalho extra ou não funcionar se o processo estiver sendo executado em uma máquina diferente.

  • xkill não pode encerrar o processo, se ele for projetado para se recuperar de uma falha do servidor X ou perda de conectividade de rede, mas a maioria dos aplicativos simplesmente falhará nessas circunstâncias. Em qualquer caso, as janelas terão desaparecido. E processos remotos e locais são tratados de forma idêntica.

por Random832 05.10.2016 / 18:02
1

use xkill . Basta digitar xkill no seu terminal e clicar na janela desejada.

  

xkill

    
por Abhishek Dhanraj Shahdeo 06.10.2016 / 10:51