Linuxマシンで実行されている2つのプログラム間で通信するためのソリューションを(Qtで)実装する必要があります。1 つのプログラムは Worker で、2 つ目は Watchdog です。基本的に、ウォッチドッグが定期的にワーカーをチェックし、何か問題がある場合(プロセスがない、ハングアップ-ワーカーからの応答がない場合)、ワーカーを強制終了し(存在する場合)、再度起動する必要があります。Worker はデーモンとして動作するので、unix の /etc/init.d/worker から起動するのが適切だと思います。私は2つの解決策を見ることができます
- Unix シグナル - どちらも Unix SIGUSR1 を送受信できます
- 共有メモリ
どちらを選ぶ?シグナルを使用すると、両方のプログラムが他の pid を知る必要があり、おそらくファイルシステム /var/run から読み取るため、欠点のように見えます。共有メモリを使用すると、必要なのはプログラムがハードコーディングする「キー」だけなので、ファイルシステムから pid を読み取る必要はありません。Watchdog は最初に開始する必要があるため、共有メモリ セグメントを作成できます。Worker はそれにアタッチするだけで、おそらくそのタイムスタンプ値を更新しますか??? ただし、Watchdog で Worker を停止するには (ハングアップした場合)、Watchdog は SIGKILL を送信するために Worker pid を必要とします。おそらく、共有メモリから読み取ることができますか? どちらの概念も私にとっては新しいものです。
では、信頼できるウォッチドッグを構築する適切な方法は何ですか?
よろしくお願いします
マレク