shutdown发送不处理的
SIGTERM信号
atexit。上下文管理器,
finally块等也不会。
import signalsignal.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)
如果执行上述操作,则需要做两件事:
- 更改的签名
byebye
以接受signal
将传递给它的两个参数。 - 您应该
sys.exit()
在byebye
函数末尾执行类似call的操作,以允许python正常关闭商店。
您也可以将
signal和 进行某种组合
atexit:
import syssignal.signal(signal.SIGTERM, lambda num, frame: sys.exit(0))
它将直接插入您当前的代码。这样可以确保清理操作的原子性(即
byebye保证是最后的I / O操作),但会有些笨拙。



