0

Linuxマシンで実行されている2つのプログラム間で通信するためのソリューションを(Qtで)実装する必要があります。1 つのプログラムは Worker で、2 つ目は Watchdog です。基本的に、ウォッチドッグが定期的にワーカーをチェックし、何か問題がある場合(プロセスがない、ハングアップ-ワーカーからの応答がない場合)、ワーカーを強制終了し(存在する場合)、再度起動する必要があります。Worker はデーモンとして動作するので、unix の /etc/init.d/worker から起動するのが適切だと思います。私は2つの解決策を見ることができます

  1. Unix シグナル - どちらも Unix SIGUSR1 を送受信できます
  2. 共有メモリ

どちらを選ぶ?シグナルを使用すると、両方のプログラムが他の pid を知る必要があり、おそらくファイルシステム /var/run から読み取るため、欠点のように見えます。共有メモリを使用すると、必要なのはプログラムがハードコーディングする「キー」だけなので、ファイルシステムから pid を読み取る必要はありません。Watchdog は最初に開始する必要があるため、共有メモリ セグメントを作成できます。Worker はそれにアタッチするだけで、おそらくそのタイムスタンプ値を更新しますか??? ただし、Watchdog で Worker を停止するには (ハングアップした場合)、Watchdog は SIGKILL を送信するために Worker pid を必要とします。おそらく、共有メモリから読み取ることができますか? どちらの概念も私にとっては新しいものです。

では、信頼できるウォッチドッグを構築する適切な方法は何ですか?

よろしくお願いします

マレク

4

1 に答える 1

1

これが Qt で利用できる最良のソリューションだと思います。

http://qt-project.org/doc/qt-4.8/qlocalsocket.html

http://qt-project.org/doc/qt-4.8/qlocalserver.html

QLocalSocket クラスは、ローカル ソケットを提供します。Windows ではこれは名前付きパイプであり、Unix ではこれはローカル ドメイン ソケットです。

http://qt-project.org/doc/qt-4.8/ipc-localfortuneserver.html

http://qt-project.org/doc/qt-4.8/ipc-localfortuneclient.html

それが役立つことを願っています。

于 2013-03-12T06:06:16.243 に答える