Qt是否支持分叉进程

时间:2014-02-12 11:34:58

标签: c++ qt

当我在Qt应用程序中fork()时,Qt的哪些部分表现得很清醒? Qt是否支持这个?

显然,例如MacOSX上的GUI不起作用,因为Cocoa本身不支持分叉进程。

但还有许多其他部分,例如线程列表等

QCoreApplication::applicationPid()似乎返回了错误的值。 (根据here。)

或者让问题略有不同:我必须在我的应用中fork(),并且某些部分可能会在子进程中访问Qt。尽管有Qt GUI的所有内容,我还需要在哪里特别小心?

2 个答案:

答案 0 :(得分:3)

TL; DR “我可以在分叉中使用Qt中的哪些内容?” “任何事情,只要你通过代码审计向自己证明,那里没有与分叉有关的错误”。

这些都没有经过测试,所以没有人知道是否有任何与分叉相关的东西曾经起作用,并且被打破了,以及它是否仍然有效。

Qt有一个持续集成系统,它在多个平台上进行测试,作为将更改升级到未来版本的先决条件。这包括测试关键领域的性能回归。 IOW,它不是测试套件的笑话,它是真实的。在测试套件中没有解决分叉的事实应该是一个强烈的信号,告诉你,你在这里独自一人。

因此,您需要在任何地方都要小心,并且需要审核您调用的整个Qt代码。对不起,这是唯一合理的答案。

答案 1 :(得分:1)

在MeeGo上有一个守护进程applauncherd,它通过在需要时分叉来提高Qt应用程序的启动时间。 所以一般情况下这是可能的,但正如您所注意到QCoreApplication::applicationPid()返回错误的值。据我所知,MeeGo使用了稍微修改过的Qt版本。 它是开源项目,因此您可以检查代码如何解决问题。

当你使用fork时,你会失去可移植性,所以一旦你使用了fork你可以使用fork相关的API而不使用QCoreApplication::applicationPid()但是直接使用getpid函数。