Linux:複数のプロセスを監視するためのウォッチドッグの作成

Linux:複数のプロセスを監視するためのウォッチドッグの作成

数年前、ある同僚が監視プログラムのための優雅な解決策を思いついた。このプログラムはWindows上で動作し、以下を使用します。Windowsイベントオブジェクト複数のアプリケーションのプロセスハンドル(PID)を監視します。両方のプロセスのいずれかが予期せず終了すると、そのプロセスハンドルはもう存在しなくなり、その監視はすぐにシグナルを受け取ります。その後、監視装置はシステムを「治療」するために適切な処置をとる。

私の質問は、Linuxでそのような監視デバイスを実装する方法です。あるプログラムに他の複数のプログラムのPIDを監視させる方法はありますか?

ベストアンサー1

従来の、移植可能で一般的に使用される方法は、親プロセスが子プロセスを監視することである。

基本プリミティブはwaitそしてwaitpidシステムコール。子プロセスが終了すると、親プロセスは終了した子プロセスとその終了状態を確認するためにSIGCHLD呼び出す必要があることを知らせます。wait親プロセスはそれを無視して便利なときに呼び出すことを選択できますSIGCHLDwaitpid(-1, &status, WNOHANG)

多くのプロセスを監視するには、同じ親プロセスからすべてのプロセスを作成するか、必要なプログラムを呼び出して終了するのを待ってから終了を報告する単純な監視プロセスを介して呼び出すことができます(シェル構文:)myprogram; echo myprogram $? >>/var/run/monitor-collector-pipe。 Windowsの世界にいる場合は、小さなプログラムに特別な作業を実行させることは、プロセスを安価にするためにオペレーティングシステムが設計されたUnixの世界で一般的なデザインであることを覚えておいてください。

プロセスが終了した時期を報告し、オプションで再起動できるプロセス監視(スーパーバイザーとも呼ばれる)プログラムがたくさんあり、他にもいくつかあります。監視装置監督する突然現れる、…

おすすめ記事