트랩을 에 넣고 if
스크립트를 실행한 후 두 번째 실행 후에 잠금 파일이 유지되었다는 경고가 표시되었습니다(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
기본적으로 전송됨).