qtcreator发送的“停止”信号

时间:2013-01-03 11:14:22

标签: linux qt signals qt-creator

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

2 个答案:

答案 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处理这些案例。