I've a daemon-like process that starts two subprocesses (and one of the subprocesses starts ~10 others). When I systemctl stop
my process the child subprocesses appear to be 'aggressively' killed by systemctl
- which doesn't give my process a chance to clean up.
How do I get systemctl stop
to quit the aggressive kill and thus to allow my process to orchestrate an orderly clean up?
I tried timeoutSec=30
to no avail.
KillMode=
[1] defaults to control-group
. That means every process of your service is killed with SIGTERM.
You have two options:
TimeoutStopSec
(which defaults to 90 seconds [2])KillMode=mixed
. SIGTERM will be sent to the main process only. Then again shutdown within TimeoutStopSec
. If you do not shutdown within TimeoutStopSec
, systemd will send SIGKILL
to all your processes.Note: I suggest to use KillMode=mixed
in option 2 instead of KillMode=process
, as the latter would send the final SIGKILL
only to your main process, which means your sub-processes would not be killed if they've locked up.
[1] https://www.freedesktop.org/software/systemd/man/systemd.kill.html#KillMode=
[2] https://www.freedesktop.org/software/systemd/man/systemd-system.conf.html#DefaultTimeoutStartSec=