finalizando processos com killall processname

2

Estou usando várias instâncias (perfis) do Icedove (Thunderbird) e quando preciso fechar todas elas, eu uso:

killall icedove

De acordo com man killall , se nenhum nome de sinal for especificado, SIGTERM será enviado.

And, 'SIGTERM' allows the process to perform nice termination releasing 
resources and saving state if appropriate.

Quando fechei o Icedove após uma instalação do Addon, as alterações de configuração que fiz no addon foram perdidas. Eu tive que repetir os passos e fechar corretamente (usando sair no Menu).

Eu entendo que isso é apenas uma evidência anedótica. Não tenho observação suficiente para fazer afirmações conclusivas.

Mas ainda assim, existe alguma possibilidade de tornar a solicitação de finalização ainda mais "agradável" que killall <processname> , de modo que a terminação seja tão limpa como se o aplicativo fosse fechado usando menu- > ?

    
por Martin Vegter 14.12.2014 / 12:16

2 respostas

4

SIGTERM permite que um processo execute a limpeza antes de terminar, mas se o processo realmente funciona ou não, e que tipo de limpeza ele executa, depende de como o programa foi escrito e (para um extensão) nas instalações em que a linguagem em que o programa foi escrito fornece. Assim, quando um programa recebe o SIGTERM, ele não é obrigado a salvar nada, mas é bem provável que todos os arquivos que ele tenha aberto atualmente serão fechados.

Existem sinais "mais legais" do que o SIGTERM, por exemplo, SIGUSR1, mas um programa ignorará esses sinais, a menos que tenha sido escrito para ouvi-los especificamente.

    
por 14.12.2014 / 13:06
3

Você pode usar wmctrl para fechar todas as janelas de um aplicativo específico 1 (até onde eu sei que é "tão limpo como se o aplicativo estivesse fechado usando menu- > Sair ").
usando o aplicativo wm_class :

for win in $(wmctrl -lx | awk '$3 ~ /Icedove/ {print $1}'); do wmctrl -ic "$win"; done

usando o aplicativo pid :

for win in $(wmctrl -lp | awk -v icepid=$(pgrep icedove) '$3 == icepid {print $1}'); do wmctrl -ic "$win"; done

1: Com um aplicativo habilitado para bandeja, o fechamento irá minimizá-lo na bandeja. Se já estiver na bandeja, -c não fará nada. wmctrl não possui um fechamento alternativo ou um comando 'kill' para este caso ( source ).

    
por 14.12.2014 / 20:44