我在 linux 上工作,当我使用 Qt creator IDE 上的“停止”按钮关闭它时,我意识到我的应用程序正在留下守护进程。我想处理这些情况,以便应用程序以与关闭主窗口时相同的方式关闭。要编写处理程序,我需要知道它对应于哪些信号。
2 回答
深入研究 QtCreator 的代码,我可以看到 QtCreator 在内部使用 QProcess 来启动您的应用程序。红色的“停止”按钮连接到ApplicationLauncher::stop()
,它以两种方式之一终止您的进程,具体取决于它是 GUI 应用程序还是控制台应用程序,但在这两种情况下,结果在 Linux 上最终是相同的。
对于 GUI 应用程序,ApplicationLauncher
调用QProcess::terminate()
,它又向您的守护程序发送 SIGTERM(在 Linux 上)信号。然后它等待 (with waitForFinished()
) 1 秒钟,如果到那时守护程序还没有退出,它会调用QProcess::kill()
, 发送SIGKILL
。
对于控制台应用程序,ApplicationLauncher
将终止委托给ConsoleProcess
实用程序类。在 Linux 上,ConsoleProcess::stop()
将类似于ApplicationLauncher
GUI 应用程序,它首先发送SIGTERM
,然后等待 1 秒,SIGKILL
如果尚未终止则发送。
您将在此处找到来自 QtCreator 的相关代码:
简短版:你不能
长版:
您可以尝试使用:
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 处理这些情况是不可能的。