트랩이 'if' 안에 있으면 잠긴 파일이 삭제되지 않습니다.

트랩이 'if' 안에 있으면 잠긴 파일이 삭제되지 않습니다.

트랩을 에 넣고 if스크립트를 실행한 후 두 번째 실행 후에 잠금 파일이 유지되었다는 경고가 표시되었습니다(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신호는 설계상 포착할 수 없습니다.

대신 일반 형식을 사용하십시오 kill( TERM기본적으로 전송됨).

또한보십시오:"kill -9" /SIGKILL을 사용하면 안되는 이유

관련 정보