systemd stop命令如何实际工作

时间:2017-03-23 14:04:07

标签: systemd

我正在使用一个systemd服务,当它被“启动”时调用一个进程(例如$ systemctl start test.service)。根据设计,该过程永远保持循环,我们可以使用'ps'命令查看进程是否存在。我们还看到该进程被系统停止命令杀死(按预期)。 但是我们的要求是,我们希望在进程被杀之前从进程内做一些安全的关闭操作。但我不确定如何从进程中检测系统停止操作。

systemctl是否停止test.service命令发送SIGKILL或SIGTERM信号以终止该进程?如何从进程中检测到systemctl停止操作?

2 个答案:

答案 0 :(得分:49)

默认情况下,会发送SIGTERM,然后等待90秒,然后再发送SIGKILL。

使用systemd杀死进程非常容易定制并且有详细记录。

我建议阅读所有man systemd.kill以及阅读ExecStop= in man systemd.service作为文档的所有选项。

答案 1 :(得分:1)

systemctl stop test.service命令是否发送SIGKILL或SIGTERM信号来杀死 处理?如何从进程内部检测到systemctl停止操作?

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

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

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

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