トラップをに挿入してif
スクリプトを実行した後、2回目の実行後にロックファイルが保持されたという警告が表示されました(ok)。ちなみに、kill -9
PIDを実行してもロックファイルは削除されません。
if
以前にトラップを移動した場合(今後に説明できるもの):
- その後、
kill -9 PID
ロックされたファイルが削除されます。 (OK) - ただし、追加の実行スクリプトを実行すると、最初の警告のみが表示されます。最初の追加実行後、ロックファイルがトラップされて削除されるためです
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
デフォルトで送信されます)。
また見なさい:"kill -9" /SIGKILL を使用しない理由