プロセスがハングしているかどうかを判断する一般的な方法がわかりません。ロックの問題が原因でプロセスがハングした場合、0% の CPU を消費する可能性があり、ハングしていて機能していないと推測できる場合があります。ただし、無限ループでハングした場合、プロセスは CPU を 100% ビジー状態にする可能性がありますが、有用な作業は実行されません。また、ネットワーク上で通信しているプロセスがあり、タイムアウトが長い非常に遅いホストと通信している場合があります。これはハングしませんが、待機中に 0% の CPU を消費します。
一般に、サブプロセスがプロセス間通信を使用して「私はまだ生きている」ことを意味する信号を定期的に送信する、ある種の「ウォッチドッグ」システムをセットアップすることが唯一の希望だと思います。
サブプロセスとして実行しているプログラムを変更できない場合は、少なくともハングする理由を突き止め、ハングしたことを推測する方法を見つけられるかどうかを確認してください。おそらく、通常は CPU と I/O のバランスの取れた組み合わせになっていますが、ハングするとタイトな無限ループに入り、CPU 使用率が 100% になります。それは、それを殺して再起動する時が来たというあなたの手がかりになります。または、30 秒ごとにログ ファイルに書き込み、ファイルのサイズを監視して、ファイルが大きくならない場合は再起動することもできます。または、プログラムを「冗長」モードにして、動作中にメッセージを出力することもできます (stdout
またはstderr
) そしてあなたはそれらを見ることができます。または、プログラムがデーモンとして機能する場合は、アクティブにクエリを実行して、プログラムが動作しているかどうかを確認できます。たとえば、データベースの場合は、単純なクエリを送信して、成功するかどうかを確認します。
そのため、一般的な回答を提供することはできませんが、特定のプログラムがいつハングするかを検出する方法を見つけられるようになることを願っています。
最後に、考えられる最善の解決策は、ハングする理由を突き止め、問題を修正して、それ以上発生しないようにすることです。これは不可能かもしれませんが、少なくとも心に留めておいてください。プログラムがハングしなくなった場合は、プログラムのハングを検出する必要はありません。
PS「プロセスを監視する方法」をGoogleで検索して、そこから何か役立つアイデアが得られるかどうかを確認することをお勧めします。