構成管理を行うデーモンプロセスがあります。他のすべてのプロセスは、機能するためにこのデーモンと対話する必要があります。しかし、大規模なアクションを実行すると、数時間後にデーモン プロセスが 2 ~ 3 時間応答しなくなります。そして2~3時間後、正常に動作しています。
Linux プロセス ハングの問題のデバッグ ユーティリティ?
Linux プロセスがハングするポイントを取得する方法は?
これらのそれぞれは、一緒に問題の全体像を構築する少しの情報を与えるかもしれません。
gdbを使用する場合、アプリがブロックされたときにコアダンプをトリガーすると便利な場合があります。次に、静的スナップショットがあります。これは、事後デバッグを使用して自由に分析できます。これらをスクリプトでトリガーすることができます。理論をテストするために使用できるスナップショットのセットをすばやく作成します。
1 つのオプションは、実行中のプロセスにアタッチするためにコマンドを使用gdb
して使用することです。attach
問題の実行可能ファイルのシンボルを含むファイルをロードする必要があります (file
コマンドを使用) 。
さまざまな方法があります。
ステータス要求を処理するために、UNIX ドメイン ソケットをリッスンします。次に、外部アプリケーションは、アプリケーションがまだ正常かどうかを問い合わせることができます。一定のタイムアウト期間内に応答がない場合は、クエリされているアプリケーションがデッドロックしているか、停止していると見なすことができます。
事前に選択されたパスを持つファイルに定期的にアクセスします。外部アプリケーションはファイルのタイムスタンプを調べることができ、ファイルが古い場合は、アプリケーションが停止しているかデッドロックしていると見なすことができます。
alarm
syscall を繰り返し使用して、シグナルでプロセスを終了させることができます (それに応じて sigaction を使用してください)。呼び出し続ける限りalarm
(つまり、プログラムが実行されている限り)、実行され続けます。そうしないと、信号が発火します。
この回答で説明されているように、プロセスが終了するfork
と、プロセスをシームレスに再起動できます。OS がメモリ ページを共有するため、大きなリソースを消費しません。waitpid