【发布时间】:2013-03-11 15:59:57
【问题描述】:
我需要(在 Qt 中)实现一些解决方案来在 Linux 机器上运行的两个程序之间进行通信。一个程序是 Worker,第二个是 Watchdog。基本上我需要看门狗定期检查 Worker,以防出现问题(没有进程,挂断 - Worker 没有回答)杀死 Worker(如果存在)并重新启动它。 Worker 作为守护进程运行,所以我认为从 unix /etc/init.d/worker 启动它是合适的。 我可以看到两种解决方案
- Unix 信号 - 它们都可以发送和接收 Unix SIGUSR1
- 共享内存
选择哪一个? 有了信号,两个程序都必须知道其他 pid,可能从文件系统 /var/run 读取,所以它看起来像一个缺点。 使用共享内存,我所需要的只是程序将硬编码的“密钥”,因此无需从文件系统中读取 pid。由于 Watchdog 应该首先启动,它可以创建共享的 mem 段,而 Worker 只会附加到它并且可能会更新它的时间戳值???但是,通过 Watchdog 停止 Worker(在挂断的情况下)Watchdog 仍然需要 Worker pid 向他发送 SIGKILL,也许它可以从共享内存中读取它?这两个概念对我来说都是新的。
那么构建可靠的看门狗的正确方法是什么,或者我错过了什么?
最好的问候
马雷克
【问题讨论】: