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