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.
QSignalBlocker can be used wherever you would otherwise use a pair of calls to blockSignals(). It blocks signals in its constructor and in the destructor it resets the state to what it was before the constructor ran.
An unclaimed breakpoint represents a task to interrupt the debugged program and passes the control to you later. It has two states: pending and implanted . Unclaimed breakpoints are stored as a part of a session and exist independently of whether a program is being debugged or not.
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
calls QProcess::terminate()
, which in turn sends a SIGTERM (on Linux) signal to your daemon. It then waits (with waitForFinished()
) for 1 second, and if the daemon hasn't quit by then, it calls QProcess::kill()
, sending SIGKILL
.
For a console app, ApplicationLauncher
delegates the termination to the ConsoleProcess
utility class. On Linux, ConsoleProcess::stop()
will act similar to ApplicationLauncher
for a GUI app, which is first sending SIGTERM
, then waiting for 1 second, and sending SIGKILL
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.
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With