如何优雅地处理SIGTERM信号?

23 浏览
0 Comments

如何优雅地处理SIGTERM信号?

假设我们有一个用Python编写的如此微不足道的守护进程:

def mainloop():
    while True:
        # 1. 做一些
        # 2. 重要的
        # 3. 工作
        # 4. 睡眠
mainloop()

我们使用start-stop-daemon将其守护化,默认情况下在--stop时发送SIGTERMTERM)信号。

假设当前执行的步骤是#2。在这个时刻,我们发送了TERM信号。

发生的情况是执行立即终止。

我发现我可以使用signal.signal(signal.SIGTERM, handler)来处理信号事件,但问题是它仍然会中断当前的执行并将控制权传递给handler

所以,我的问题是 - 是否可能不中断当前的执行,而是在一个独立的线程中处理TERM信号,这样我就能够设置shutdown_flag = True,以便mainloop()有机会优雅地停止?

0