예유틸리티 리눅스flock
flock()
Linux C API를 기반으로 구현되었나요?
잠금 파일만 보면 프로세스에서 명령이 실행되고 있는지 알 수 있나요? 데몬화된 명령 flock
실행이 완료되면 잠금 파일이 변경되지 않는 것 같습니다. 실행 중과 완료 후의 모습은 다음과 같습니다.
$ ls -l ../sleep.flock.file
-rw-rw-r-- 1 t t 0 Oct 30 14:01 ../sleep.flock.file
$ ls -l ../sleep.flock.file
-rw-rw-r-- 1 t t 0 Oct 30 14:01 ../sleep.flock.file
감사해요.
답변1
예. 에 명확하게 명시되어 있음man 1 flock
이 flock
명령은 flock()
및man 2 flock
주석 섹션에는 이것이 flock()
Linux 커널 2.0부터 시작하는 시스템 호출을 통해 구현된다고 나와 있습니다.
답변2
$ flock -xn /home/vagrant/forever.lck -c /var/tmp/forever.sh
위의 클러스터 명령은 /home/vagrant/forever.lck 파일을 엽니다.배타적(-x) 파일 잠금그리고 지정된 명령(-c)을 실행합니다. [forever.sh는 sleep 25d 명령을 사용하여 완료하는 데 25일이 걸립니다.]
두 번째 인스턴스를 실행하면 Flock은 독점 파일 잠금이 이미 존재한다는 것을 인식합니다.
$ flock -xn /home/vagrant/forever.lck -c /var/tmp/forever.sh
$ echo $?
1
Flock이 파일을 잠글 수 없고 -n(비차단) 플래그로 실행되면 Flock 명령은 오류가 발생했음을 나타내는 종료 코드와 함께 자동으로 종료됩니다.
Flock의 유용한 점은 원래 프로세스가 완료될 때까지 파일 잠금이 그대로 유지되며, 이 시점에서 Flock이 파일 잠금을 해제한다는 것입니다. 이는 프로세스가 성공적으로 완료되거나 실패하든 마찬가지입니다.
자물쇠는 여기서 중요한 것이며 눈에 보이지 않습니다 ls
.