我遇到了this回复的帖子,似乎表明安装了闭包,因为信号处理程序应该捕获他们的环境,但是我没有看到(使用Python 2.7)。例如:
import os
import signal
import time
if __name__ == "__main__":
pid = os.fork()
if pid:
signal.pause()
else:
sigint = False
def handler(s, f):
# global sigint
print "sigint: {}".format(sigint)
print "Signal handler"
sigint = True
signal.signal(signal.SIGINT, handler)
signal.pause()
if sigint:
print "Caught sigint, sleeping briefly"
time.sleep(2)
print "exiting..."
使用^ C运行和触发会在孩子中引发UnboundedLocalError: local variable 'sigint' referenced before assignment
。取消注释global
声明修复此问题。显然这与前面提到的帖子不一致,上一篇文章是不正确的,还是我在这里做错了什么?
else
块可以替换整个主线程以获得相同的结果。