Традиційний, портативний, широко використовуваний спосіб полягає в тому, щоб батьківський процес стежив за своїми дітьми.
Основними примітивами є wait
іwaitpid
системні виклики. Коли дочірній процес помирає, батьківський процес отримує SIGCHLD
сигнал, повідомляючи йому, що він повинен зателефонувати, wait
щоб дізнатися, яка дитина померла та її вихідний статус. Батьківський процес замість цього може вибрати ігнорувати SIGCHLD
та дзвонити waitpid(-1, &status, WNOHANG)
.
Щоб відстежувати багато процесів, ви або породжуєте їх з одного батьківського виклику, або викликаєте їх усі за допомогою простого процесу моніторингу, який просто викликає потрібну програму, чекає її завершення та повідомляє про припинення (у синтаксисі оболонки:) myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe
. Якщо ви приїжджаєте зі світу Windows, зауважте, що малі програми, які виконують одне спеціалізоване завдання, є загальним дизайном у світі Unix, ОС призначена для того, щоб зробити процеси дешевими.
Існує багато програм моніторингу процесів (їх також називають супервізорами), які можуть повідомляти про те, що процес вмирає, і необов'язково перезапустити його, і багато іншого, крім того: Monit , Supervise , Upstart ,…