我使用的是一个systemd服务,它在进程“启动”时调用它(例如$systemctl start test.service)。根据设计,进程永远处于循环中,我们可以使用'ps‘命令查看进程的存在。我们还看到,由于systemctl stop命令,进程正在被终止(正如预期的那样)。然而,我们的要求是,我们希望在进程被终止之前从进程中执行一些安全的关闭操作。但我不确定如何从进程内部检测systemd stop操作。
systemctl stop test.service命令是否发送SIGKILL或SIGTERM信号来终止进程?如何从进程内部检测systemctl停止操作?
发布于 2017-03-23 22:37:44
默认情况下,发送SIGTERM,然后等待90秒,然后发送SIGKILL。
使用systemd
终止进程是非常可定制的,并且有很好的文档记录。
我建议你在阅读ExecStop= in man systemd.service的同时阅读man systemd.kill的全部内容。
要响应这些信号,请参阅您使用的语言的信号处理文档。
发布于 2020-04-20 15:18:38
系统停止test.service命令是否发送SIGKILL或SIGTERM信号来终止进程?如何从进程内部检测systemctl停止操作?
Systemd向进程发送SIGTERM信号。在处理过程中,你必须注册信号,这些信号是“捕获”的。
在过程中,例如。SIGTERM信号可按如下方式注册:
void signal_callback()
{
printf("Process is going down\n");
}
signal(SIGTERM, signal_callback)
当SIGTERM被发送到进程时,将执行signal_callback()函数。
https://stackoverflow.com/questions/42978358
复制相似问题