我需要实现(在Qt中)一些解决方案,以便在Linux机器上运行的两个程序之间进行通信。一个程序是Worker,第二个是Watchdog。基本上我需要看门狗定期检查工作者,如果出现问题(没有进程,挂断 - 没有来自工作人员的回答)杀死工人(如果存在)并重新启动它。 Worker作为守护进程运行,所以我认为从unix /etc/init.d/worker启动它是合适的。 我可以看到两个解决方案
选择哪一个? 有了信号,两个程序都必须知道其他pid,可能是从文件系统/ var / run读取,所以它看起来像一个缺点。 使用共享内存,我所需要的只是程序将硬编码的“关键”,因此无需从文件系统中读取pid。由于Watchdog应该首先启动它可以创建共享内存段,而Worker只会附加到它并可能更新其时间戳值???但是,要通过Watchdog来阻止Worker(如果是挂起)Watchdog仍然需要Worker pid发送给他SIGKILL,也许它可以从共享内存中读取它?这两个概念对我来说都是新的。
那么构建可靠的Watchdog的正确方法是什么,或者我错过了什么?
最好的问候
马立克
答案 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
希望有所帮助。