我正在使用一个systemd服务,当它被“启动”时调用一个进程(例如systemctl start test.service
)。根据设计,该进程将永远循环运行,我们可以使用ps
命令查看该进程的存在。我们也看到,对于systemctl stop
命令,该进程被杀死了(如预期)。
但是,我们的要求是在进程被杀死之前从进程内部执行一些安全关闭操作。但我不知道如何从进程内部检测到systemd
停止操作。
systemctl stop test.service
命令是否发送SIGKILL
或SIGTERM
信号以杀死进程?我如何在进程内检测到systemctl stop
操作?
KillMode
https://www.freedesktop.org/software/systemd/man/systemd.kill.html#KillMode= 来调整主进程的子进程所需执行的操作。默认行为是在主进程结束时杀死任何剩余的子进程 (因为通常这是为了释放所有泄漏的资源,因为良好的主进程在等待所有子进程停止之前不会结束wait()
:n)。 - Mikko Rantalainen