我将陷阱放入if
,运行脚本,第二次执行后,它警告锁定文件已被保留(确定)。但是当我kill -9
运行 PID 时,锁定文件不会被删除。
if
当我将陷阱移到(您现在可以在下面评论的内容)之前:
- 然后当我
kill -9 PID
,锁定文件被删除(好的) - 但是当我运行额外的执行脚本时,只有第一个警告,因为在第一次额外的运行之后,锁定文件被 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
信号在设计上是不可捕获的。
请改用普通格式kill
(TERM
默认发送)。