0

我需要实现(在 Qt 中)一些解决方案来在 Linux 机器上运行的两个程序之间进行通信。一个程序是 Worker,第二个是 Watchdog。基本上我需要看门狗定期检查 Worker,以防出现问题(没有进程,挂断 - Worker 没有回答)杀死 Worker(如果存在)并重新启动它。Worker 作为守护进程运行,所以我认为从 unix /etc/init.d/worker 启动它是合适的。我可以看到两个解决方案

  1. Unix 信号 - 它们都可以发送和接收 Unix SIGUSR1
  2. 共享内存

选择哪一个?有了信号,这两个程序都必须知道其他程序的 pid,可能从文件系统 /var/run 读取,所以它看起来像一个缺点。使用共享内存,我所需要的只是程序将硬编码的“密钥”,因此无需从文件系统中读取 pid。由于 Watchdog 应该首先启动,它可以创建共享的 mem 段,而 Worker 只会附加到它并且可能会更新它的时间戳值???但是,通过 Watchdog 停止 Worker(在挂断的情况下)Watchdog 仍然需要 Worker pid 向他发送 SIGKILL,也许它可以从共享内存中读取它?这两个概念对我来说都是新的。

那么构建可靠看门狗的正确方法是什么,或者我错过了什么?

此致

马立克

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 回答