Die traditionelle, tragbare und häufig verwendete Methode besteht darin, dass der übergeordnete Prozess seine untergeordneten Elemente überwacht.
Die grundlegenden Primitiven sind die wait
undwaitpid
Systemaufrufe. Wenn ein untergeordneter Prozess stirbt, erhält der übergeordnete Prozess ein SIGCHLD
Signal, in dem er anruft, um wait
zu wissen, welches Kind gestorben ist und welchen Beendigungsstatus es hat . Der übergeordnete Prozess kann stattdessen nach Belieben ignorieren SIGCHLD
und aufrufen waitpid(-1, &status, WNOHANG)
.
Um viele Prozesse zu überwachen, würden Sie sie entweder alle vom selben übergeordneten Element erzeugen oder sie alle über einen einfachen Überwachungsprozess aufrufen, der nur das gewünschte Programm aufruft, darauf wartet, dass es beendet wird und über die Beendigung berichtet (in Shell-Syntax:) myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe
. Wenn Sie aus der Windows-Welt kommen, beachten Sie, dass kleine Programme, die eine spezielle Aufgabe ausführen, in der Unix-Welt häufig verwendet werden. Das Betriebssystem wurde entwickelt, um Prozesse kostengünstig zu gestalten.
Es gibt viele Prozessüberwachungsprogramme (auch Supervisor-Programme genannt), die melden können, wann ein Prozess abbricht und ihn optional neu starten, und vieles mehr: Monit , Supervise , Upstart , ...