我正在rust中编写一个要求很高的程序,该程序具有用于处理非常重要的数据的可变线程,我想知道是否有一种方法可以通过systemctl发送信号来停止它,这样我就可以确保它在停止之前完成了任务,因为它要求很高,使用http_request,线程是变量,我无法估计从发送信号到进程终止我需要等待多少时间。
在esscense中,它是一个在变量设置为false之前一直处于循环中的守护进程,如以下
loop {
// Process goes here
if !is_alive {
break;
}
}
我现在正在做的是,该程序正在询问一个";config.json";文件,如果它是"strong";"活着",但我认为这不是最好的方式,因为我不知道程序何时停止,只能看到它正在停止,但不能看到它将持续多久,如果我这样做,systemctl将显示服务处于活动状态,即使我手动关闭了它。
如果您想尝试Systemd服务行为,我会查看Systemd文档。在这种情况下,我将引导您进入关于TimeoutStopSec
的部分。
根据文档,您可以使用TimeoutStopSec=infinity
禁用系统停止命令上的任何超时。这与实际处理systemd默认使用的SIGTERM
信号相结合就可以了。
此外,还有KillSignal
选项,您可以通过该选项指定发送到程序的信号以停止程序,或者ExecStop
指定要运行的程序以停止服务。
我希望,有了这些,你应该能够弄清楚。