Existe uma ferramenta do tipo pkill que faz isso:
- enviar sinal para todos os processos correspondentes
- espere N segundos até que os processos terminem
- se todos os processos terminaram, legal: sair
- se alguns processos não terminaram envie SIGKILL
Para mim é importante que a ferramenta espere até que os processos realmente terminem.
Eu sei que é muito fácil fazer isso na minha linguagem de script favorita, mas neste caso seria muito bom se eu usasse uma ferramenta que já existe.
Isso precisa ser executado no SuSE-Linux e no Ubuntu.
Não existe um comando “padrão” que forneça o comportamento que você procura. No entanto, no Debian e derivados, você pode usar a ação
start-stop-daemon
's--stop
com a--retry
opção:enviará
SIGTERM
para todos os processos nomeadosdaemontokill
, esperará até 15s para que eles parem, então enviaráSIGKILL
para todos os processos restantes (da seleção inicial) e esperará mais 15s para que eles morram. Ele sairá com status 0 se não houver nada para matar ou todos os processos parados, 2 se alguns processos ainda estiverem ativos após o segundo tempo limite.Existem várias opções para combinar processos de várias maneiras, consulte a documentação (link acima) para obter detalhes. Você também pode fornecer uma programação mais detalhada com tempos limite variados.
start-stop-daemon
faz parte dodpkg
pacote, portanto está sempre disponível nos sistemas Debian (e derivados). Algumas não.deb
-distribuições também disponibilizam o pacote; por exemplo, openSUSE Leap 42 tem. É bastante simples construir em outras plataformas:Você vai precisar
autoconf
de ,automake
,libtool
,gettext
. Assim que a compilação estiver concluída, você encontrarástart-stop-daemon
noutils
diretório.Você pode usar o
timeout
comando comkillall -w
por exemplo:
timeout
irá "tempo limite" após 3 segundos e sairá com o código de erro, que então você pega||
e então correkillall -s9
para forçar o kill.Você pode criar seu próprio roteiro que atenderá ao seu caso. Seguindo este post uso inútil de kill -9 e source reallykill
Então você pode apenas baixar o script para o seu diretório bin:
Eu usaria assim:
Talvez você queira alterar a ordem dos sinais com INT primeiro, para ter uma saída com o resumo do comando ping. O comando fornecido não espera se o sinal KILL for bem-sucedido, mas deve funcionar, pois o processo será encerrado pelo sistema.