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.
4 Identifying and stopping processes in systemd services The systemd-cgls command displays all processes that belong to a systemd service, and systemctl SIGNAL PROCESS stops them.
KillMode= Specifies how processes of this unit shall be killed. One of control-group , mixed , process , none . If set to control-group , all remaining processes in the control group of this unit will be killed on unit stop (for services: after the stop command is executed, as configured with ExecStop= ).
KillMode= 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)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.
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