Questions tagged «sigterm»


7
如何优雅地处理SIGTERM信号?
假设我们有一个用python编写的琐碎守护程序: def mainloop(): while True: # 1. do # 2. some # 3. important # 4. job # 5. sleep mainloop() 我们将它守护起来start-stop-daemon,默认情况下使用它发送SIGTERM(TERM)信号--stop。 假设当前执行的步骤是#2。此时此刻,我们正在发送TERM信号。 发生的事情是执行立即终止。 我发现我可以使用处理信号事件,signal.signal(signal.SIGTERM, handler)但事实是它仍然会中断当前执行并将控制权传递给handler。 所以,我的问题是-它可以不中断当前执行,但处理TERM在一个独立的线程信号,使我能够设置(?) shutdown_flag = True,这样mainloop()有机会停止正常?

7
我应该以什么顺序向正常关闭进程发送信号?
在评论对这个答案的另一个问题,该评论说: 除非绝对必要,否则不要使用kill -9!SIGKILL无法被捕获,因此被终止的程序无法运行任何关闭例程来删除临时文件。首先尝试HUP(1),然后尝试INT(2),然后尝试QUIT(3) 我原则上同意SIGKILL,但是其余对我来说就是新闻。鉴于发送的默认信号kill是SIGTERM,我希望它是正常关闭任意进程的最普遍期望的信号。另外,我还看到了SIGHUP出于非终止原因使用的原因,例如告诉守护程序“重新读取配置文件”。在我看来,SIGINT(通常与Ctrl-C相同的中断,对吗?)并没有得到应有的广泛支持,或者以不合时宜的方式终止。 鉴于这SIGKILL是万不得已的方法,您应该以哪种信号以及以什么顺序发送到任意进程,以便尽可能地正常关闭它? 如果可以的话,请用支持性的事实(超越个人喜好或意见)或参考来证实您的答案。 注意:我对包括考虑bash / Cygwin在内的最佳实践特别感兴趣。 编辑:到目前为止,似乎没有人提到INT或QUIT,并且很少提及HUP。是否有任何理由将它们包括在有序的过程中?

By using our site, you acknowledge that you have read and understand our Cookie Policy and Privacy Policy.
Licensed under cc by-sa 3.0 with attribution required.