shutdown
发送不处理的SIGTERM
信号atexit
。上下文管理器,finally
块等也不会。
import signal
signal.getsignal(signal.SIGTERM)
Out[64]: 0 #i.e. nothing
与此相反,例如ctrl-C:
signal.getsignal(signal.SIGINT)
Out[65]: <function signal.default_int_handler> #i.e. something
您可以向其注册byebye
函数signal
以运行而不是不执行任何操作(这将导致解释器最终被shell杀死)
signal.signal(signal.SIGTERM,byebye)
如果执行上述操作,则需要做两件事:
您也可以将signal
和 进行某种组合atexit
:
import sys
signal.signal(signal.SIGTERM, lambda num, frame: sys.exit(0))
它将直接插入您当前的代码。这样可以确保清理操作的原子性(即byebye
保证是最后的I / O操作),但会有些笨拙。