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

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

몇 년 전, 한 동료가 감시 프로그램에 대한 우아한 솔루션을 생각해 냈습니다. 이 프로그램은 Windows에서 실행되며 다음을 사용합니다.Windows 이벤트 객체여러 애플리케이션의 프로세스 핸들(PID)을 모니터링합니다. 두 프로세스 중 하나가 예기치 않게 종료되면 해당 프로세스 핸들은 더 이상 존재하지 않으며 해당 감시는 즉시 신호를 받습니다. 그런 다음 감시 장치는 시스템을 "치료"하기 위해 적절한 조치를 취합니다.

내 질문은 Linux에서 그러한 감시 장치를 구현하는 방법입니다. 하나의 프로그램이 다른 여러 프로그램의 PID를 모니터링하도록 하는 방법이 있습니까?

답변1

전통적이고 이식 가능하며 일반적으로 사용되는 방법은 상위 프로세스가 하위 프로세스를 모니터링하는 것입니다.

기본 프리미티브는wait그리고waitpid시스템 호출. 하위 프로세스가 종료되면 상위 프로세스는 종료된 하위 프로세스와 해당 종료 상태를 확인하기 위해 SIGCHLD호출해야 한다는 신호를 받습니다. wait상위 프로세스는 이를 무시하고 편리할 때 호출하도록 선택할 수 있습니다 SIGCHLD.waitpid(-1, &status, WNOHANG)

많은 프로세스를 모니터링하려면 동일한 상위 프로세스에서 모든 프로세스를 생성하거나 필요한 프로그램을 호출하고 종료될 때까지 기다린 후 종료를 보고하는 간단한 모니터링 프로세스를 통해 호출할 수 있습니다(셸 구문: ) myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe. Windows 세계에서 오신 분이라면 작은 프로그램이 특수한 작업을 수행하도록 하는 것이 프로세스를 저렴하게 만들기 위해 운영 체제가 설계된 Unix 세계에서 일반적인 디자인이라는 점을 기억하세요.

프로세스가 종료된 시기를 보고하고 선택적으로 다시 시작할 수 있는 프로세스 모니터링(감독자라고도 함) 프로그램이 많이 있으며 그 외에도 여러 가지가 있습니다.감시 장치,감독하다,갑자기 나타나다,…

답변2

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

관련 정보