6

我在 linux 上工作,当我使用 Qt creator IDE 上的“停止”按钮关闭它时,我意识到我的应用程序正在留下守护进程。我想处理这些情况,以便应用程序以与关闭主窗口时相同的方式关闭。要编写处理程序,我需要知道它对应于哪些信号。

4

2 回答 2

9

深入研究 QtCreator 的代码,我可以看到 QtCreator 在内部使用 QProcess 来启动您的应用程序。红色的“停止”按钮连接到ApplicationLauncher::stop(),它以两种方式之一终止您的进程,具体取决于它是 GUI 应用程序还是控制台应用程序,但在这两种情况下,结果在 Linux 上最终是相同的。

对于 GUI 应用程序,ApplicationLauncher调用QProcess::terminate(),它又向您的守护程序发送 SIGTERM(在 Linux 上)信号。然后它等待 (with waitForFinished()) 1 秒钟,如果到那时守护程序还没有退出,它会调用QProcess::kill(), 发送SIGKILL

对于控制台应用程序,ApplicationLauncher将终止委托给ConsoleProcess实用程序类。在 Linux 上,ConsoleProcess::stop()将类似于ApplicationLauncherGUI 应用程序,它首先发送SIGTERM,然后等待 1 秒,SIGKILL如果尚未终止则发送。

您将在此处找到来自 QtCreator 的相关代码:

于 2013-01-03T18:04:31.617 回答
1

简短版:你不能

长版:

您可以尝试使用:

http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit

但这不会按预期工作。如果一个进程被强制终止(这是 IDE 中的停止正在做的事情,我猜想在 windows http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714上使用 TerminateProcess() (v=vs.85).aspx ) 然后该进程会在它正在执行的任何过程中立即被杀死。单独从 Qt 处理这些情况是不可能的。

于 2013-01-03T13:01:50.657 回答