나는 여러 프로세스와 통신하는 데몬을 연구 중이다. 데몬은 항상 프로세스를 모니터링 할 수는 없지만, 프로세스가 죽을 때 프로세스가 죽었는지 제대로 식별 할 수 있어야합니다.장기 실행 프로세스가 중단되었는지 확인하는 방법은 무엇입니까?
프로세스는 데몬과 통신하여 시작 부분에 정보를 제공 할 수 있지만 그 반대는 아닙니다. 따라서 데몬은 프로세스에 ID를 요청할 수 없습니다.
가장 간단한 형태는 PID 만 사용하는 것입니다. 그러나 궁극적으로 내 도구가 눈치 채지 않고도 다른 프로세스에 동일한 PID를 할당 할 수 있습니다.
더 나은 방법은 PID와 프로세스 시작 시간을 사용하는 것입니다. 동일한 PID를 갖는 새로운 프로세스는 별개의 시작 시간을 갖습니다. 하지만 POSIX 방식으로 프로세스 시작 시간을 얻는 방법을 찾지 못했습니다. ps
을 사용하거나 /proc/<pid>/stat
을 보면 충분히 휴대 할 수없는 것처럼 보입니다. POSIX 호환 보인다
더 복잡한 생각은 다음과 같습니다
- 각 프로세스는 임시 파일을 만듭니다.
- 잠금 장치
flock
- 내 데몬에 "내 신원이이 파일과 연결되었습니다."라고 알립니다.
- 언제든지 데몬이 임시 파일을 확인할 수 있습니다. 잠겨 있으면 프로세스가 살아 있습니다. 그것이 아니라면, 그 과정은 죽었습니다.
그러나 이것은 불필요하게 복잡해 보입니다.
더 좋거나 표준적인 방법이 있습니까?
편집 : 데몬은 다시 시작한 후에 다시 시작할 수 있어야하므로 각 프로세스마다 영구 연결을 유지할 수 없습니다.
문제는 다시 시작한 후에 데몬을 다시 시작할 수 있어야한다는 것입니다. 이것은 소켓 연결이나 그와 비슷한 것을 잃음으로써 프로세스의 죽음을 감지 할 수 없다는 것을 의미합니다. 프로세스를보다 복잡하게 만들지 만, 프로세스가 데몬에 대한 연결을 주기적으로 갱신하도록 요구할 수 있습니다. 커널이 나를 위해 관리하는 것을 찾고있는 사람, 데몬이 이것을 확인하고있다 (프로세스 시작 시간과 같다). –
@ PetrPudlák 예, 음, 모든 추가 요구 사항은 솔루션을 좀 더 복잡하게 만들 가능성이 큽니다 ... 이것은 매우 일반적인 현상입니다. – twalberg