[Interest] proper (silent) exit in response to SIGHUP?
Thiago Macieira
thiago.macieira at intel.com
Sun Oct 7 20:00:48 CEST 2018
On Sunday, 7 October 2018 00:48:01 PDT René J.V. Bertin wrote:
> Hi,
>
> How feasible would it be to implement a SIGHUP handler that triggers a
> proper, silent/non-interactive exit?
It's not very difficult.
Open a pipe or an eventfd, then install your signal handler. In that signal
handler, write anything to the writing end or write uint64_t(1) the eventfd.
Create a QSocketNotifier on the reading end of the pipe or on the eventfd,
connect its activation signal to a slot that does what you want.
That's it.
> I presume the problem isn't very hard for applications running locally
> (though I might be overlooking something). However, I mostly have the XCB
> QPA in mind here, and applications running remotely on an X11 server that
> becomes unresponsive or unavailable (network issue, or remote host
> suspended). Does the regular shutdown procedure under X11 contain calls
> that would block indefinitely and if so, is there a way to circumvent this
> procedure (calling exit() or _exit() after some custom save-what-you-can
> cleanup)? I'd presume that similar interrogations can be made for other
> QPAs allowing remote displaying - the VNC QPA and possibly Wayland?
Exiting with exit() is not expected to work with Qt. Normal exit must return
from main(), so you should simply ask the QCoreApplication main event loop to
exit (quit() slot).
_exit() is a valid alternative, but note it won't save any files or flush any
buffers or run destructors.
But if you wanted that, you wouldn't need to add a signal handler, since
SIGHUP's default behaviour is to terminate the application.
--
Thiago Macieira - thiago.macieira (AT) intel.com
Software Architect - Intel Open Source Technology Center
More information about the Interest
mailing list