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.
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?
Tags kill shell-script function