나는 종종 pid와 lock 파일을 지정하는 프로그램을 본다. 나는 그들이 무엇을 하는지 잘 모르겠습니다.
예를 들어, nginx를 컴파일할 때:
--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \
누군가 이것을 설명할 수 있나요?
답변1
pid 파일은 일부 프로그램에서 시작 시 프로세스 ID를 기록하기 위해 작성됩니다. 이는 다양한 목적으로 사용됩니다.
- 이는 이 특정 프로그램이 실행 중이거나 적어도 성공적으로 시작되었음을 시스템의 다른 프로세스 및 사용자에게 보내는 신호입니다.
- 이를 통해 매우 쉬운 스크립트를 작성하여 실행 중인지 확인하고
kill
종료하고 싶을 때 간단한 명령을 실행할 수 있습니다. - 이는 프로그램이 이전에 실행 중인 인스턴스가 성공적으로 종료되지 않았는지 확인하는 저렴한 방법입니다.
물론, 단순히 pid 파일이 존재한다고 해서 특정 프로세스 ID가 실행 중이라는 보장은 없으므로 이 접근 방식이 100% 완벽하지는 않지만 많은 경우에 "충분히 좋습니다". 프로세스 테이블에 특정 PID가 존재하는지 확인하는 것은 UNIX와 유사한 운영 체제에서 정확히 이식 가능하지 않습니다. 단, 해당 유틸리티에 의존하고 싶지 않은 경우에는 아마도 ps
모든 인스턴스에서 호출하고 싶지 않을 것입니다(일부 UNIX- 어쨌든 다른 방식으로 구현된 운영 체제와 같습니다 ps
.)
파일 잠금의 개념은 다음과 같습니다. 의도는 두 개의 (잘 동작하는) 별도의 프로그램 인스턴스(아마도 시스템에서 동시에 실행됨)가 동시에 다른 콘텐츠에 액세스하지 않도록 하는 것입니다. 프로그램이 리소스에 액세스하기 전에 잠금 파일이 있는지 확인하고, 잠금 파일이 있으면 오류를 출력하거나 사라질 때까지 기다리는 것이 아이디어입니다. 파일이 존재하지 않으면 리소스를 "가져오려는" 프로그램이 파일을 생성한 다음 나중에 만날 수 있는 다른 인스턴스는 프로세스가 완료될 때까지 기다립니다. 물론 이는 잠금을 "획득"한 프로그램이 실제로 잠금을 해제하고 잠금 파일을 삭제하는 것을 잊지 않았다고 가정합니다.
이는 모든 UNIX 계열 운영 체제의 파일 시스템이 강제로 실행되기 때문에 가능합니다.직렬화즉, 파일 시스템에 대한 변경 사항은 주어진 시간에 실제로 한 번만 발생한다는 의미입니다. 데이터베이스 잠금 등과 비슷합니다.
운영 체제 또는 런타임 플랫폼은 일반적으로 동기화 기본 요소를 제공하며 이러한 기본 요소를 사용하는 것이 일반적으로 더 나은 결정입니다. 호출을 추상화하기 위한 신뢰할 수 있는 라이브러리 없이 과거와 미래의 다양한 운영 체제에서 실행되도록 설계된 무언가를 작성하는 것과 같은 상황이 있을 수 있습니다(예: 다양한 UNIX 버전에서 작동하도록 설계된 가능 sh
하거나 bash
기반 스크립트). 해결책은 좋은 타협이 될 수 있습니다.
답변2
이러한 파일은 일반적으로 시스템에서 한 번만 실행할 수 있는 데몬에 의해 사용됩니다. PID 파일에는 일반적으로 시작되어 실행 중인 프로그램의 프로세스 ID 번호가 포함되어 있습니다. 또한 시작 시 잠금 파일을 생성합니다. 잠금 파일이 존재하는 한 사용자 개입 없이는 다른 잠금 파일이 시작되지 않습니다. 잠금 파일이 존재하고 pid 파일에 언급된 프로세스 ID가 실행되고 있지 않은 경우 데몬은 "죽은" 상태에 있는 것으로 간주됩니다. 즉, 실행 중이어야 하지만 충돌이나 부적절한 종료로 인한 것이 아닐 수 있음을 의미합니다. 이로 인해 일부 프로그램에 대한 특별한 시작/다시 시작 시나리오가 시작될 수 있습니다. 제대로 닫으면 잠금 파일이 삭제됩니다.
답변3
PID 파일에는 실행 중인 프로세스의 프로세스 ID가 포함됩니다. 이는 다양한 용도로 사용됩니다. 이를 읽고 프로세스가 아직 실행 중인지 확인하고 적절한 조치를 취하거나, 읽고 프로세스를 종료할 수 있습니다.
잠금 파일은 응용 프로그램별로 다를 가능성이 높습니다. 잠금 파일은 특정 리소스가 사용 중이고 액세스를 원하는 프로세스가 계속하기 전에 리소스가 해제될 때까지 기다려야 함을 나타내는 데 사용됩니다.