我正在 Linux 上工作,当我使用 Qt 创建者 IDE 上的“停止”按钮关闭应用程序时,我意识到我的应用程序留下了守护进程。我想处理这些情况,以便应用程序以与关闭主窗口相同的方式关闭。要编写处理程序,我需要知道它对应于哪些信号。
深入研究 QtCreator 的代码,我可以看到 QtCreator 在内部使用 QProcess 来启动您的应用程序。红色“停止”按钮连接到ApplicationLauncher::stop()
,它以两种方式之一终止您的进程,具体取决于它是 GUI 应用程序还是控制台应用程序,但在这两种情况下,结果在 Linux 上最终是相同的。
对于 GUI 应用程序,ApplicationLauncher
calls QProcess::terminate()
,它又向您的守护进程发送 SIGTERM(在 Linux 上)信号。然后它等待(与waitForFinished()
) 1 秒,如果守护进程此时还没有退出,它会调用QProcess::kill()
, 发送SIGKILL
.
对于控制台应用程序,ApplicationLauncher
将终止委托给ConsoleProcess
实用类。在 Linux 上,ConsoleProcess::stop()
将表现类似于ApplicationLauncher
对于 GUI 应用程序,首先发送SIGTERM
,然后等待1秒,发送SIGKILL
如果它还没有终止。
您可以在此处找到 QtCreator 的相关代码:
- GUI 应用程序终止 http://qt.gitorious.org/qt-creator/qt-creator/blobs/2.6/src/plugins/projectexplorer/applicationlauncher.cpp#line173
- 控制台应用程序终止(在 Linux 上) http://qt.gitorious.org/qt-creator/qt-creator/blobs/2.6/src/libs/utils/consoleprocess_unix.cpp#line163
- 控制台应用程序终止(在 Windows 上) http://qt.gitorious.org/qt-creator/qt-creator/blobs/2.6/src/libs/utils/consoleprocess_win.cpp#line158
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)