それの要旨は次のとおりです。
- あなたはプログラムがまだ実行されているとハングアップされていないかどうかを検出する必要があります。
- プログラムが実行されていない、またはハングアップしている場合は、プログラムを再起動する必要があります。
あり#1を行うには、いくつかの異なる方法がありますが、気になる2は、以下のとおりです。
は、ステータス要求を処理するために、UNIXドメインソケットに聞きます。外部アプリケーションは、アプリケーションがまだ正常かどうかを問い合わせることができます。タイムアウト期間内に応答がない場合、照会されているアプリケーションがデッドロックしているか、またはデッドしているとみなすことができます。
事前に選択したパスでファイルを定期的にタッチします。外部アプリケーションはファイルのタイムスタンプを見ることができ、失効している場合は、アプリケーションがデッドまたはデッドロックしていると見なすことができます。
#2に関しては、以前のPIDを強制終了し、fork + execを使用して新しいプロセスを起動するのが一般的です。一度実行されるアプリケーションに「継続的に」実行されるアプリケーションを作成することもできますが、「cron」などのアプリケーションを使用して、その単一実行アプリケーションを継続的に再実行することも考えられます。
残念ながら、ウォッチドッグタイマとデッドロックの解除は重要な問題ではありません。私はこれを行う一般的な方法は知らないし、私が見た少数はかなり醜いものであり、100%のバグフリーではない。ただし、tsanは、潜在的なデッドロックシナリオや静的解析によるその他のスレッド問題を検出するのに役立ちます。
どれを開始するために他のあなたの
/etc/init.d/
にこのスクリプトを置くことができ、アプリケーション実行しているため、このスクリプト? – user623879多くの組み込みプラットフォームでは、ウォッチドッグデーモンがハードウェアウォッチドッグをプロンプトしてウォッチドッグが死ぬことがないようにすることができます – Hasturkun
「アプリケーションを1回だけ実行するように調整してから、アプリケーションを繰り返し実行してください。これが可能であれば、検出プロセスを大幅に簡略化します。 –