两个程序之间的通信信号或共享内存?

时间:2013-03-11 15:59:57

标签: qt signals ipc

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

  1. Unix信号 - 它们都可以发送和接收Unix SIGUSR1
  2. 共享内存
  3. 选择哪一个? 有了信号,两个程序都必须知道其他pid,可能是从文件系统/ var / run读取,所以它看起来像一个缺点。 使用共享内存,我所需要的只是程序将硬编码的“关键”,因此无需从文件系统中读取pid。由于Watchdog应该首先启动它可以创建共享内存段,而Worker只会附加到它并可能更新其时间戳值???但是,要通过Watchdog来阻止Worker(如果是挂起)Watchdog仍然需要Worker pid发送给他SIGKILL,也许它可以从共享内存中读取它?这两个概念对我来说都是新的。

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

    最好的问候

    马立克

1 个答案:

答案 0 :(得分: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

希望有所帮助。