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