Linux : 여러 프로세스를 모니터링하기위한 워치 독 작성


14

몇 년 전, 동료는 워치 독 프로그램을위한 우아한 솔루션을 고안했습니다. 이 프로그램은 Windows에서 실행되었고 Windows 이벤트 객체를 사용했습니다. 를 하여 여러 응용 프로그램의 프로세스 핸들 (PID)을 모니터링했습니다. 프로세스 중 하나가 예기치 않게 종료되면 프로세스 핸들이 더 이상 존재하지 않으며 그의 감시자에게 즉시 신호를 보냅니다. 그러면 감시자는 시스템을 "치유"하기 위해 적절한 조치를 취합니다.

제 질문은 리눅스에서 그러한 워치 독을 어떻게 구현하겠습니까? 단일 프로그램이 다른 많은 PID를 모니터링 할 수있는 방법이 있습니까?



답변:


17

일반적으로 사용되는 기존의 휴대용 방법은 부모 프로세스가 자식을 감시하는 것입니다.

기본 프리미티브는 waitwaitpid 시스템 호출입니다. 하위 프로세스가 종료되면 상위 프로세스가 SIGCHLD신호를 수신하여 wait종료 한 하위 및 종료 상태를 알도록 호출해야 함 을 알려줍니다. 부모 프로세스는 대신 편의상 무시 SIGCHLD하고 호출 하도록 선택할 수 있습니다 waitpid(-1, &status, WNOHANG).

많은 프로세스를 모니터링하려면 동일한 부모에서 프로세스를 모두 생성하거나 원하는 프로그램을 호출하는 간단한 모니터링 프로세스를 통해 프로세스를 모두 호출하고 종료 될 때까지 기다렸다가 종료에 대해보고합니다 (쉘 구문). myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe . Windows 세계에서 온다면, 하나의 특수한 작업을 수행하는 작은 프로그램을 갖는 것이 Unix 세계에서 일반적인 디자인이며 OS는 프로세스를 저렴하게 만들도록 설계되었습니다.

프로세스가 종료되는시기를보고하고 선택적으로 다시 시작할 수있는 Monit , Supervise , Upstart 등의 프로세스 모니터링 (감독 자라고도 함) 프로그램이 많이 있습니다 .


+1, 내가 찾던 것-자세한 답변을 주셔서 감사합니다.
저스틴에 티어

0

이 문제에 대한 나의 접근 방식은 init와 내장 respawn 지시문을 사용하여 실행해야 할 모든 것을 시작 / 다시 시작하는 것입니다. 이것이 원래 의도와 주요 목적이었습니다. 어떤 경우에는 프로세스가 종료 된 후 정리하거나 프로세스 시작을 준비하기 위해 스크립트를 실행해야합니다 (대부분의 작업은 동일 함). 대부분의 경우 exec로 끝나는 bash 스크립트가 이것에 효과적입니다.

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