【问题标题】:Communication between two programs signals or shared mem?两个程序之间的通信信号还是共享内存?
【发布时间】:2013-03-11 15:59:57
【问题描述】:

我需要(在 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,也许它可以从共享内存中读取它?这两个概念对我来说都是新的。

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

最好的问候

马雷克

【问题讨论】:

    标签: qt signals ipc


    【解决方案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

    希望对您有所帮助。

    【讨论】:

    • 谢谢,这是我没有考虑过的。我会去的。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2020-09-06
    • 2012-01-11
    • 2011-11-06
    • 1970-01-01
    • 2010-11-27
    相关资源
    最近更新 更多