kill -KILL
(ou kill -9
) mata o processo sem poder limpá-lo. O sinal SIGKILL
é não-interceptável por design.
Use um kill
simples (envia TERM
por padrão).
Veja também: Por que não devo usar 'kill - 9 '/ SIGKILL
Eu coloquei minha armadilha dentro de um if
, executei o script, e após essa segunda execução, ele avisa que o arquivo de bloqueio está travado (ok). Mas quando eu kill -9
o PID em execução, o arquivo de bloqueio não é removido.
Quando eu mover o trap antes do if
(o que você pode ver agora comentado abaixo):
Como obter a armadilha dentro de if
para remover o arquivo de bloqueio em kill -9
do script?
lockfile=/tmp/localfile
#trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT KILL
if ( set -o noclobber; echo "$$" > "$lockfile") 2> /dev/null;
then
trap 'rm -f "$lockfile"; exit $?' INT TERM EXIT KILL
while true
do
ls -ld ${lockfile}
sleep 1
done
rm -f "$lockfile"
trap - INT TERM EXIT
else
echo "Failed to acquire lockfile: $lockfile."
echo "Held by $(cat $lockfile)"
fi
kill -KILL
(ou kill -9
) mata o processo sem poder limpá-lo. O sinal SIGKILL
é não-interceptável por design.
Use um kill
simples (envia TERM
por padrão).
Veja também: Por que não devo usar 'kill - 9 '/ SIGKILL