当陷阱位于“if”内部时,锁定文件不会被删除

当陷阱位于“if”内部时,锁定文件不会被删除

我将陷阱放入if,运行脚本,第二次执行后,它警告锁定文件已被保留(确定)。但是当我kill -9运行 PID 时,锁定文件不会被删除。

if当我将陷阱移到(您现在可以在下面评论的内容)之前:

  1. 然后当我kill -9 PID,锁定文件被删除(好的)
  2. 但是当我运行额外的执行脚本时,只有第一个警告,因为在第一次额外的运行之后,锁定文件被 trap on 删除EXIT

如何获取内部陷阱以删除脚本if上的锁定文件?kill -9

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

答案1

kill -KILL(或kill -9) 终止进程而不进行清理。该SIGKILL信号在设计上是不可捕获的。

请改用普通格式killTERM默认发送)。

也可以看看:为什么我不应该使用“kill -9”/SIGKILL

相关内容