假设我们有一个用 python 编写的这样一个简单的守护进程:
def mainloop():
while True:
# 1. do
# 2. some
# 3. important
# 4. job
# 5. sleep
mainloop()
and we daemonize it using start-stop-daemon
which by default sends SIGTERM
( TERM
) signal on --stop
.
假设当前执行的步骤是 #2
。就在此时此刻,我们正在发送 TERM
信号。
发生的情况是执行立即终止。
我发现我可以使用 signal.signal(signal.SIGTERM, handler)
处理信号事件,但问题是它仍然会中断当前执行并将控制权传递给 handler
。
所以,我的问题是 - 是否可以不中断当前执行,而是在单独的线程中处理 TERM
信号(?)以便我能够设置 shutdown_flag = True
以便 mainloop()
有机会优雅地停下来吗?
原文由 zerkms 发布,翻译遵循 CC BY-SA 4.0 许可协议
基于类的清洁使用解决方案: