I have a console daemon that is run by a GUI application. When the GUI application is terminated I’d like to stop the daemon as well.
How can I do it in a gentle way on windows?
On Linux, I would just use SIGTERM is there a similar mechanism on windows for console applications?
To provide a bit more detail, the daemon app is written in python and the gui is written in C# & windows forms.
Define “gentle” 🙂
I’m assuming there is already a communication mechanism in place between the daemon and the GUI. Just introduce a “quit” command and send it.
If you want to kill the daemon even if it’s busy doing something (or is frozen), use TerminateProcess().
To have the best of both, you can send “quit”, then wait on the process handle for some time (WaitForSingleObject()). If the daemon process does not die in, say, 5 sec, then terminate it.
If the main thread of the daemon is prone to long periods of busy activity, have the daemon start a background thread that does nothing but waits for a named event. To signal that thread, open the event by name from GUI, then raise it. It’s up to the daemon what to do upon event detection, but at least it will be a controlled shutdown.