Como fechar a aplicação do terminal da mesma maneira que sair corretamente

8

Normalmente, quando executo uma aplicação em um ambiente gráfico, quando eu quero fechá-la, clico em X no canto superior esquerdo da janela ou passo para File > Close .

Eu gostaria de algumas vezes fechar esses programas remotamente por ssh a partir do terminal usando a linha de comando, agora eu uso o comando kill , mas eu me pergunto se ele faz o mesmo que sair da aplicação propriamente de si mesmo.

Do sinal padrão man kill parece ser 15) SIGTERM, este sinal vai dizer ao aplicativo que estou tentando fechar para limpar, fechar arquivos abertos, salvar coisas?

Existe uma maneira melhor se eu quiser fazer isso do terminal?

    
por Mike 09.06.2016 / 18:46

2 respostas

7

A maneira típica de fechar o aplicativo normalmente é usar kill -TERM 1234 , onde 1234 é o PID da janela. O problema, no entanto, é que as aplicações gráficas são projetadas para escutar um sinal específico do próprio servidor X, não escutando o sinal TERM .

Isso significa que você precisaria de algum tipo de agente entre você e o servidor X para comunicar que você deseja enviar o sinal apropriado. É claro que você pode escrever um programa em C, no entanto existe um programa wmctrl (não surpreendentemente escrito em C) que faz exatamente isso.

O uso de wmctrl é simples:

wmctrl -c :SELECT: # close window that will be selected with pointer
wmctrl -c :ACTIVE: # close currently active window
wmctrl -ic <numeric id> # close window with specific id in hex

Não é instalado por padrão, portanto, use-o com sudo apt-get install wmctrl

Existem muitos usos para wmctrl está muito além de apenas fechar janelas, então, por favor, veja mais das minhas respostas e de Jacob Vlijm para exemplos de scripts nos quais ele foi usado

    
por Sergiy Kolodyazhnyy 09.06.2016 / 19:07
2

Acho que vale a pena adicionar que wmctrl -xl produzirá resultados como este:

0x03000001 -1 google-chrome.google-chrome  dcentore-pc Rybak - Google Play Music - Google Chrome
0x04600006  0 speedcrunch.Speedcrunch  dcentore-pc SpeedCrunch

Onde o x solicita a janela classe para estar na saída. Esta é frequentemente a maneira mais fácil de fechar o mesmo programa todas as vezes. Então, podemos apenas fornecer a classe da janela ao fechá-la:

wmctrl -xc speedcrunch.Speedcrunch

Este exemplo irá fechar o speedcrunch.

    
por Daniel Centore 22.09.2016 / 05:29