systemd stop 命令实际上是如何工作的



我正在使用一个systemd服务,它在进程"启动"时调用它(例如 systemctl start test.service(。根据设计,流程永远保持循环,我们能够使用 ps 命令查看进程的存在。我们还看到,这个过程正在被杀死(如预期的那样(用于systemctl stop命令。但是,我们的要求是,我们希望在进程被终止之前从进程内执行一些安全的关闭操作。但我不确定如何从流程中检测systemd停止操作。

systemctl stop test.service命令是否发送SIGKILLSIGTERM信号来终止进程?如何从流程中检测systemctl stop操作?

默认情况下,发送一个SIGTERM然后等待 90 秒,然后是SIGKILL

使用 systemd 杀死过程是非常可定制的,并且有据可查。

我建议阅读所有man systemd.kill以及阅读man systemd.service中的ExecStop=。

要响应这些信号,请参阅您正在使用的语言的信号处理文档。

systemctl stop test.service 命令是否发送 SIGKILL 或 SIGTERM 信号来终止过程?如何从进程内检测系统停止操作?

Systemd 发送 SIGTERM 信号进行处理。在此过程中,您必须注册"捕获"的信号。

正在进行中,例如。SIGTERM信号可以像这样注册:

void signal_callback()
{
    printf("Process is going downn");
}
signal(SIGTERM, signal_callback)

当 SIGTERM 发送到进程时,将执行signal_callback()函数。

最新更新