How systemd stop command actually works

2020-05-15 15:36发布

问题:

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?

回答1:

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 as the document all the options.



回答2:

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.



标签: systemd