従来のポータブルで一般的に使用される方法は、親プロセスがその子を監視することです。
基本的なプリミティブはwait
とwaitpid
システムコールです。子プロセスが停止すると、親プロセスはSIGCHLD
シグナルを受信し、wait
どの子が停止したかと終了ステータスを知るために呼び出す必要があることを伝えます。代わりに、親プロセスは、都合のよいときに無視SIGCHLD
して呼び出すことを選択できますwaitpid(-1, &status, WNOHANG)
。
多くのプロセスを監視するには、同じ親からすべてを生成するか、目的のプログラムを呼び出して終了するのを待って終了を報告する単純な監視プロセスを介してそれらをすべて呼び出します(シェル構文:)myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe
。Windowsの世界から来たのであれば、小さなプログラムが1つの特別なタスクを実行することはUnixの世界では一般的な設計であり、OSはプロセスを安価にするように設計されていることに注意してください。
多くのプロセス監視(スーパーバイザーとも呼ばれます)プログラムがあり、プロセスが終了したときに報告し、オプションでそれを再起動できます。さらに、Monit、Supervise、Upstartなど