pid 및 lock 파일은 무엇입니까?


75

프로그램에서 pid 및 lock 파일을 지정하는 경우가 종종 있습니다. 그리고 그들이 무엇을하는지 잘 모르겠습니다.

예를 들어, nginx를 컴파일 할 때 :

--pid-path=/var/run/nginx.pid \
--lock-path=/var/lock/nginx.lock \

누군가 이것에 약간의 빛을 비출 수 있습니까?

답변:


86

pid 파일은 시작하는 동안 프로세스 ID를 기록하기 위해 일부 프로그램에서 작성합니다. 이것은 여러 가지 목적이 있습니다.

  • 특정 프로그램이 실행 중이거나 최소한 성공적으로 시작되었음을 시스템의 다른 프로세스 및 사용자에게 알리는 신호입니다.
  • 스크립트가 실제로 실행 중인지 쉽게 확인하고 스크립트 kill를 끝내려면 일반 명령을 실행할 수 있습니다.
  • 프로그램이 이전에 실행중인 인스턴스가 성공적으로 종료되지 않았는지 확인할 수있는 가장 저렴한 방법입니다.

pid 파일이 있다고해서 특정 프로세스 ID가 실행되고 있다고 보장 할 수는 없으므로이 방법은 100 % 완전하지는 않지만 많은 경우에 "충분히 좋은"방법입니다. 프로세스 테이블에 특정 PID가 있는지 확인하는 것은 ps모든 인스턴스에서 호출하는 것이 바람직하지 않을 수 있는 유틸리티 에 의존하지 않는 한 UNIX와 같은 운영 체제에서 완전히 이식 가능 하지 않습니다 (일부 UNIX와 유사한 운영 체제를 믿는다) ps어쨌든 다르게 구현하십시오 ).

잠금 파일은 한 시스템에서 동시에 실행될 수있는 프로그램의 두 개의 (잘 작동하는) 개별 인스턴스가 동시에 다른 것에 액세스하지 않도록하기 위해 프로그램에서 사용됩니다. 아이디어는 프로그램이 리소스에 액세스하기 전에 잠금 파일이 있는지 확인하고 잠금 파일이 존재하면 오류가 발생하거나 사라질 때까지 기다립니다. 존재하지 않으면 리소스를 "취득"하려는 프로그램이 파일을 만든 다음 나중에 발생할 수있는 다른 인스턴스가이 프로세스가 완료 될 때까지 기다립니다. 물론 이것은 잠금을 "획득"하는 프로그램이 실제로 잠금을 해제하고 잠금 파일을 삭제하는 것을 잊지 않는 것으로 가정합니다.

이것은 모든 UNIX와 유사한 운영 체제의 파일 시스템이 직렬화를 시행하기 때문에 작동합니다. 즉, 파일 시스템에 대한 한 번의 변경 만 실제로 주어진 시간에 발생합니다. 데이터베이스와 같은 잠금 장치 등.


1
잠금 파일을 수동으로 삭제하지 않는 한 올바른 것입니다. VMWare Player는 이러한 동작을 보여줍니다. 예를 들어 VMWare Player가 충돌하는 .lck경우 VM의 디렉토리에서 파일 을 삭제해야 합니다. 그렇지 않으면 파일을 시작할 때 사용 중임 을 알려줍니다.
LawrenceC

1
Windows는 어떻습니까? .lock 파일을 어떻게 처리합니까? 결국 유닉스와는 다릅니다.
SarahofGaia

2
Windows 프로그램이 이런 식으로 작동하는 것이 일반적이라고 생각하지 않습니다. 이 동작을 가진 유일한 프로그램은 유닉스 / 리눅스 포트
HaMster

2
LawrenceC, Re " 존재하지 않는 경우, 자원을"취득 "하려는 프로그램은 파일을 작성합니다 ."; 그러나 이러한 동기화를 수행하기 위해 특별히 설계된 적절한 기능이 있습니다 . "파일 핵"을 사용하는 대신 이러한 기능에 의존하지 않겠습니까?
Pacerier

1
@Pacerier-유닉스 / 리눅스 쉘이 다른 동기화 프리미티브에 비해 파일 시스템과 매우 쉽게 상호 작용하기 때문에 이런 방식으로 잠금 파일은 쉘 스크립트 또는 쉘 스크립트와 상호 작용할 수있는 프로그램에서 더 자주 사용됩니다. 파일은 개별 프로세스 간에도 쉽게 지속됩니다. 고성능 프로그램은 아마도 내부 OS 또는 셸이 아닌 다른 프로세스와 동기화하기 위해 기본 OS 프리미티브 대 파일을 수행 할 것입니다.
LawrenceC

14

이 파일은 시스템에서 한 번만 실행해야하는 데몬에서 자주 사용됩니다. PID 파일에는 일반적으로 이미 시작되어 실행중인 프로그램의 프로세스 ID 번호 (있는 경우)가 포함됩니다. 또한 시작할 때 잠금 파일을 만듭니다. 잠금 파일이 존재하는 한 사용자 개입없이 다른 잠금 파일을 시작하지 않습니다. 잠금 파일이 존재하고 pid 파일에 언급 된 프로세스 ID가 실행 중이 아닌 경우, 데몬은 "데드 (dead)"상태 인 것으로 간주됩니다. 이는 실행 중이지만 크래시 또는 부적절한 종료로 인한 것이 아님을 의미합니다. . 일부 프로그램의 경우 특수한 시작 ​​/ 다시 시작 시나리오가 시작될 수 있습니다. 올바르게 종료하면 잠금 파일이 제거됩니다.


+1 잠금 파일과 pid 파일을 모두 사용하는 방법을 설명합니다.
Kyle Krull

@Caleb-PID 파일과 잠금 파일이 모두 사용되는 이유를 설명하십시오. PID 파일이면 충분할 것 같습니다. PID 파일이 존재하면 PID를 검사하여 프로세스가 실행 중인지 확인하고 잠금 파일을 확인하고 PID 파일을 확인한 후 프로세스가 있는지 확인하는 것보다 적은 단계를 수행하면됩니다.
MVaughan

@MVaughan 다른 경쟁 조건을 피하기 위해. 일부 앱은 여전히 ​​PID가 필요하지만 잠금을 해제 할 수있는 시간에 사용합니다. 그러나 두 가지 작업 모두에 대해 하나의 파일을 오버로드하면보다 근본적인 수준에서 충돌이 시스템에서 일관되지 않은 상태를 유지하는 등의 오류가 발생할 수 있습니다.
Caleb

8

PID 파일에는 실행중인 프로세스의 프로세스 ID가 포함됩니다. 이것은 다양한 용도로 사용됩니다. 이를 읽고 프로세스가 여전히 실행 중인지 확인하고 적절한 조치를 취하거나 프로세스를 종료하십시오.

잠금 파일은 대부분 응용 프로그램에 따라 다릅니다. 잠금 파일은 일부 자원이 사용 중이며 액세스를 원하는 프로세스가 자원이 해제 될 때까지 기다려야 계속 진행하기 위해 사용됩니다.

당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.