Linux: feche um programa com linha de comando (não o mate)

21

Alguns aplicativos permitem apenas uma instância em execução (como eclipse, se você deseja usar o mesmo espaço de trabalho). Portanto, se eu fizer login de outro local, tenho que interromper / fechar o aplicativo que estava aberto quando fiz o login de outro local.

Eu sempre uso o comando kill para matar o processo em execução. Mas, se você matar um processo, talvez ele não salve alguns estados que são úteis para uso futuro. No entanto, se você "fechá-lo" corretamente, clicando no botão Fechar, por exemplo, ele salvará os estados corretamente.

Existe uma maneira de "fechar" corretamente um aplicativo na linha de comando? Eu sei que isso pode variar de aplicativo, então vamos ser um pouco mais genéricos: como enviar um sinal para outro aplicativo em execução, e esse sinal funciona como se clicássemos no botão "Fechar" na barra superior?

vendeta
fonte
2
Devemos assumir que acessar a área de trabalho remotamente com o VNC e clicar graficamente em fechar é muito caro.
Brian Swift

Respostas:

33

Por padrão, o comando kill enviará SIGTERM(sinal de terminação) para o processo em execução. Ao contrário SIGKILL, que matará o processo à força sem chance de responder, o SIGTERMsinal pode ser interceptado pelo processo, permitindo que ele termine normalmente. Se é ou não realmente não terminar normalmente é totalmente dependente do próprio processo; pode facilmente se matar ou ignorar completamente o sinal.

Você pode garantir que está enviando, em SIGTERMvez de algum outro sinal, explicitando-o na linha de comando da seguinte maneira:

kill -s TERM <pid>
goldPseudo
fonte
1
Sim, a premissa do OP é falsa. O killcomando tenta um desligamento normal. Se o aplicativo não fechar corretamente nesse caso, ele estará quebrado. (E a grande maioria dos aplicativos não são quebrados.)
David Schwartz
2
O Firefox parece estar (quebrado). Se eu executar kill -s TERM <firefox-pid>, ele não será desligado normalmente e, quando eu o reiniciar, perguntará se eu quero recuperar a sessão travada. : suspiro:
Wilson F
6

Observe que, ao usar, em pkillvez de kill, para especificar TERM, a sintaxe é:

pkill -TERM <process-name>

pkill é como matar, mas você pode usar o nome do processo em vez do id. man pkill

Connor McCormick
fonte