2013-07-01 54 views
4

我想知道是否可以创建QProcess并将其初始化为已经运行的进程?将QProcess初始化为已经运行的进程

我的应用程序启动其他应用程序。所以如果我的应用程序异常关闭,当它重新启动时,我想附加其他应用程序。

+2

你的意思是你想把QProcess附加到一个已经运行并且不能被你的程序执行的进程?我认为这是不可能的。 –

+0

不,“附加”是不可能的。 –

+0

是的,这是。它存在另一种方式来做到这一点? – artoon

回答

1

您应该使用IPC系统,例如在Linux上使用Qt D-Bus。然后,您通过IPC系统与其他进程通信,而不是stdin和stdout。

当您的前端应用程序崩溃时,重新启动的应用程序可以重新连接到后端进程。

1

不幸的是,由于QProcess的内部架构,没有支持这个。您需要将一堆QProcess代码复制粘贴到新类中,并自己添加缺失的功能。

虽然有一个更简单的方法:创建一个流程包装,通过QLocalSocket公开QProcess。包装很简单,不应该崩溃。当进程本身终止时,它可以自行终止,以防止挂起的包装纸缠绕。当应用程序崩溃或终止时,如果包装存在,新实例可以尝试附加到本地套接字。如果它不存在,那么它会产生一个新的包装。