I am working on linux and I realized that my application was leaving behind daemon processes when I close it with the "Stop" button on Qt creator IDE. I want to handle these cases so the application close the same way as when I close the main window. To write the handlers, I need to know which signals it corresponds to.
相关问题
- QML: Cannot read property 'xxx' of undefin
- Is shmid returned by shmget() unique across proces
- QTextEdit.find() doesn't work in Python
- how to get running process information in java?
- Error building gcc 4.8.3 from source: libstdc++.so
Digging into QtCreator's code, I can see that QtCreator uses a QProcess internally to launch your app. The red "stop" button is connected to
ApplicationLauncher::stop()
, which terminates your process in one of two ways depending if it's a GUI app or a console app, but in both cases, the result end up to be the same on Linux.For a GUI app,
ApplicationLauncher
callsQProcess::terminate()
, which in turn sends a SIGTERM (on Linux) signal to your daemon. It then waits (withwaitForFinished()
) for 1 second, and if the daemon hasn't quit by then, it callsQProcess::kill()
, sendingSIGKILL
.For a console app,
ApplicationLauncher
delegates the termination to theConsoleProcess
utility class. On Linux,ConsoleProcess::stop()
will act similar toApplicationLauncher
for a GUI app, which is first sendingSIGTERM
, then waiting for 1 second, and sendingSIGKILL
if it hasn't terminated yet.You will find the relevant code from QtCreator here:
Short version: You can't
Long version:
You could try using:
http://doc.qt.digia.com/qt/qcoreapplication.html#aboutToQuit
But this won't work as expected. If a process is terminated by force (which is what the stop in the IDE is doing, I'd guess using TerminateProcess() on windows http://msdn.microsoft.com/en-gb/library/windows/desktop/ms686714(v=vs.85).aspx ) then the process is instantly killed in the middle of whatever it is executing. Its not possible to handle these cases from Qt alone.