Elimina múltiplas instâncias do script a partir do próprio script

2

Eu tenho algumas instâncias de script.sh sendo executadas em paralelo, fazendo a mesma coisa, executando em segundo plano.

Estou tentando usar uma função para matar todos os scripts em execução quando executado.

Então, por exemplo, ./script.sh -start iniciará o script (que eu posso executar em paralelo) e quando eu executar ./script.sh -kill irá matar todas as instâncias do script.

f() {
             procName='basename $0'
             pidsToKill='ps -ef | grep $procName | grep -v grep | awk '{ print $2 }''
             if [[ $pidsToKill ]]; then
                    for i in $pidsToKill; do
                         kill -9 $i
                    done
                    echo "Killed running scripts."
             else
                    echo "No opened scripts to kill"
             fi
}

Por algum motivo, às vezes, ele mata alguns dos scripts e às vezes retorna um erro.

Eu descobri uma maneira de resolver isso, mas quero entender por que isso não funciona. Alguma idéia?

    
por Chen A. 19.08.2014 / 16:13

1 resposta

3

O script pode estar se matando. Você pode tentar executar o loop for dentro de um subshell separado ( for i in $pidsToKill; do kill -9 $i; done; echo All dead. ) & e sair do script.

    
por 19.08.2014 / 17:29