トラップが「if」内にある場合、ロックされたファイルは削除されません。

トラップが「if」内にある場合、ロックされたファイルは削除されません。

トラップをに挿入してifスクリプトを実行した後、2回目の実行後にロックファイルが保持されたという警告が表示されました(ok)。ちなみに、kill -9PIDを実行してもロックファイルは削除されません。

if以前にトラップを移動した場合(今後に説明できるもの):

  1. その後、kill -9 PIDロックされたファイルが削除されます。 (OK)
  2. ただし、追加の実行スクリプトを実行すると、最初の警告のみが表示されます。最初の追加実行後、ロックファイルがトラップされて削除されるためです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 を使用しない理由

関連情報