1

問題:

プロセスがいつ終了するかを知る必要があります-それがPIDであることだけを知っています。ただし、関連するすべてのプロセスのソースを変更することもできるので、理論的には必要なことは何でもできます。すべての「効率的な」アイデアを歓迎します。

戦略 1:

select()pselect()poll()、 、ppoll()を調べepoll()ました。私の理解では、ファイル記述子を取得するために、監視するプロセスごとにソケットを接続する必要があります。次に、ゼロのタイムアウト値を使用して、実行中のプロセスを実際にポーリングし、ソケットが生きているか死んでいるかを知るために、ソケットが読み取り可能かどうかを確認する必要があります。

戦略 2:

監視デーモンと他のプロセスの間に複数のパイプを作成する場合、パイプに書き込むことはできSIGPIPEますか?

結論:

現時点では、戦略 2 に賛成ですが、このアプローチに関連するアドバイスや落とし穴についてコミュニティに尋ねたいと思います。プロセスの終了についてのみ知りたいだけで、他には何も知りたくないという前提で、戦略 1 についての私の理解は正しいですか? また、戦略 2 に対する私のアプローチはあまりにも単純すぎて、私が気付いていないシステム リソースを消費するのでしょうか?

4

1 に答える 1

2

モニターに、モニター対象の各プロセスが接続できる Unix ドメイン ソケットを作成させます。poll構造体にイベントを設定せずにこれらのソケット記述子を渡すと、監視対象のプロセスの 1 つが終了し、そのソケットが閉じられたときにイベントpollfdを受け取ります。POLLHUP

于 2013-06-30T20:43:57.763 に答える