我的实验代码是这样的:
import signal
def hi(signum, frame):
print "hi"
signal.signal(signal.SIGINT, hi)
signal.signal(signal.SIGINT, signal.SIG_IGN)
Run Code Online (Sandbox Code Playgroud)
hi没有被打印,因为信号处理程序被signal.SIG_IGN.
我怎样才能避免这种情况?
如果您不想覆盖自己的处理程序,请检查您是否已设置:
if signal.getsignal(signal.SIGINT) in [signal.SIG_IGN, signal.SIG_DFL]:
signal.signal(signal.SIGINT, hi)
Run Code Online (Sandbox Code Playgroud)
根据文档,某些高级进程可能已经从默认值重新分配了处理程序。如果您不想覆盖它,请添加None到信号列表中。
明显的包装signal.signal(..., signal.SIG_IGN)将是一个not in测试。
添加以回复评论
由于信号是如此精细,因此链接信号处理程序并不常见。如果我真的想这样做,我会遵循atexit模型并注册由处理程序调用的函数。
| 归档时间: |
|
| 查看次数: |
2616 次 |
| 最近记录: |