How systemd stop command actually works

Systemd

Systemd Problem Overview


I am using a systemd service which calls a process when it's been "started" (e.g. systemctl start test.service). As per the design, the process stays for ever in a loop, we are able to see process existence using 'ps' command. We have also seen that the process is getting killed (as intended) for systemctl stop command. However our requirement is, we want to do some safe shutdown operations from within the process before it gets killed. But I am not sure how to detect a systemd stop operation from within the process.

Does a systemctl stop test.service command send SIGKILL or SIGTERM signal to kill the process? How can I detect a systemctl stop operation from within a process?

Systemd Solutions


Solution 1 - Systemd

By default, a SIGTERM is sent, followed by 90 seconds of waiting followed by a SIGKILL.

Killing processes with systemd is very customizable and well-documented.

I recommend reading all of man systemd.kill as well as reading about ExecStop= in man systemd.service.

To respond to those signals, refer to the signal handling documentation for the language you are using.

Solution 2 - Systemd

> Does a systemctl stop test.service command send SIGKILL or SIGTERM signal to kill the > process? How can i detect a systemctl stop operation from within a process?

Systemd sends SIGTERM signal to process. In process you have to register signals, which are "catched".

In process, eg. SIGTERM signal can be registered like this:

void signal_callback()
{
    printf("Process is going down\n");
}
signal(SIGTERM, signal_callback)

When SIGTERM is sent to process signal_callback() function is executed.

Attributions

All content for this solution is sourced from the original question on Stackoverflow.

The content on this page is licensed under the Attribution-ShareAlike 4.0 International (CC BY-SA 4.0) license.

Content TypeOriginal AuthorOriginal Content on Stackoverflow
Questionuser3805417View Question on Stackoverflow
Solution 1 - SystemdMark StosbergView Answer on Stackoverflow
Solution 2 - Systemduser3493290View Answer on Stackoverflow