두 개의 다른 코드 인스턴스가 두 번 이상 실행되지 않도록 파일 잠금에 bash 명령 인 flock
을 사용하고 있습니다.잠금을 얻지 못한 경우 bash의 flock이 시간 초과 종료로 종료되지 않는 이유는 무엇입니까?
나는이 테스트 코드를 사용하고 있습니다 :
((flock -x 200 ; sleep 10 ; echo "original finished" ;) 200>./test.lock) &
(sleep 2 ; (flock -x -w 2 200 ; echo "a finished") 200>./test.lock) &
을 나는 (백그라운드로)이 개 서브 쉘을 실행하고 있습니다. (flock NUM; ...) NUM>FILE
구문은 flock
's man page입니다.
첫 번째 서브 셸은 test.lock에 대한 독점적 잠금을 얻고 10 초를 기다린 다음 "원래 완료 됨"을 인쇄하고 항상 잠금을 유지할 것으로 기대합니다. 두 번째 서브 쉘은 거의 같은 시간에 시작하여 2 초를 기다린 다음 test.lock에 잠금을 설정하려고 시도하지만 2 초 후에 시간 초과됩니다. 자물쇠가 생기면 "완료"라고 인쇄합니다. 잠금을 얻지 못하면 그 서브 쉘이 멈추고 아무 것도 출력되지 않아야합니다.
첫 번째 서브 셸이 더 오래 대기하기 때문에 10 초 동안 잠금을 유지하므로 두 번째 하위 셸은 잠금을 가져 오지 않아야합니다. 즉, "원본 마무리 됨"이 인쇄되고 이 아닌 것이 모두입니다.
실제로 "완성 된"이 인쇄되면 "원본 완료 됨"이 인쇄됩니다.
이것은 두 번째 하위 셸이 (a) 첫 번째 하위 셸과 동일한 잠금을 사용하지 않거나 (b) 잠금을 얻지 못했지만 실행을 계속한다는 점 또는 (c) 다른 것을 의미합니다.
내가 원하는대로 잠금 장치가 작동하지 않는 이유는 무엇입니까?
'flock'은 배시 명령이 아닙니다. 그것은 별도의 프로그램입니다. –