我需要实现(在 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,也许它可以从共享内存中读取它?这两个概念对我来说都是新的。
那么构建可靠看门狗的正确方法是什么,或者我错过了什么?
此致
马立克