我在linux上工作,当我用Qt creator IDE上的“停止”按钮关闭它时,我意识到我的应用程序正在留下守护进程。我想处理这些情况,因此应用程序关闭的方式与关闭主窗口时的方式相同。要编写处理程序,我需要知道它对应的信号。
答案 0 :(得分:8)
深入研究QtCreator的代码,我可以看到QtCreator在内部使用QProcess来启动你的应用程序。红色的“停止”按钮连接到ApplicationLauncher::stop()
,它会以两种方式之一终止您的进程,具体取决于它是GUI应用程序还是控制台应用程序,但在这两种情况下,结果在Linux上都是相同的
对于GUI应用程序,ApplicationLauncher
调用QProcess::terminate()
,后者又向您的守护程序发送SIGTERM(在Linux上)信号。然后等待(使用waitForFinished()
)1秒钟,如果守护程序在此之前没有退出,则会调用QProcess::kill()
,发送SIGKILL
。
对于控制台应用程序,ApplicationLauncher
将终止委托给ConsoleProcess
实用程序类。在Linux上,ConsoleProcess::stop()
对于GUI应用程序的行为类似ApplicationLauncher
,首先发送SIGTERM
,然后等待1秒,如果没有,则发送SIGKILL
终止了。
您可以在此处找到QtCreator的相关代码:
答案 1 :(得分:0)
简短版:你不能
长版:
您可以尝试使用:
http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit
但这不会按预期工作。如果一个进程被强制终止(这是IDE中的停止正在进行的操作,我猜在Windows http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714(v=vs.85).aspx上使用TerminateProcess())然后该进程会立即在正在执行的任何操作中被杀死。它不可能单独从Qt处理这些案例。