【问题标题】:Reattaching to an orphan process in QT重新附加到 QT 中的孤立进程
【发布时间】:2009-11-18 22:45:12
【问题描述】:

我们正在使用 Qt 准备一个应用程序,该应用程序具有一个控制 GUI 的主进程并产生执行实际数据处理的进程。使用 Qt 机制和 stdin/stdout 管道在主进程和数据处理进程之间交换消息。

现在,如果 GUI 崩溃,其他进程会继续运行。我们想要做的是,当一个新的 GUI 启动时,像以前一样重新连接到这些进程。任何人都知道这是否可能,如果可以,如何实现?

【问题讨论】:

    标签: qt process


    【解决方案1】:

    如果您使用named pipe 与进程通信,这是可能的。如果 stdin/out 所属的进程终止,则 stdin/out 将关闭。

    【讨论】:

    • 除了 QProcess 类对象在内部处理 stdin/stdout/stderr 管道。为了改用“命名管道”,必须修改 QProcess 类,我宁愿避免这样做。
    • 您没有声明您需要使用 QProcess。在这种情况下,通过 QProcess 使用您的 GUI 应用程序创建一个代理进程。只要您的 GUI 应用程序,代理就会一直运行。它通过 QProcess::read()/write() 与您的 GUI 进行通信。该代理创建命名管道并启动工作进程并将管道连接到工作人员的标准输入/输出。如果工人死亡,它也会重新启动工人。代理可能是一个简单的 shell 脚本。
    【解决方案2】:

    您可能想要调查共享内存以进行进程之间的通信。我似乎记得它能够在以前的工作中在非常相似的情况下恢复。

    如果您的平台支持,另一种可能性是使用 dbus 进行进程之间的通信。如果是这种情况,则两个进程都不必在那里,但如果它正在运行,它将采取行动获取适当的消息。

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2015-11-23
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-04-24
      相关资源
      最近更新 更多