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