没有办法暂时从关键部分“阻止”信号(因为所有Unix版本都不支持这种信号)。
什么阻止我使用signal.signal(signum,SIG_IGN)
阻止它,然后再添加信号?
答案 0 :(得分:11)
阻止你的是,如果信号在SIG_IGN到位时实际到达,那么它将被忽略并丢弃。当你稍后再添加信号时,为时已晚,因为它已经消失了,你永远不会知道它发生了。
因此,您将“忽略”(=抛弃)信号而不是“阻止”它(=保留它以便在关键部分结束时进行处理)。你在这里的困惑可能只是因为不明白“阻塞”信号意味着什么:它意味着操作系统挂起信号,让它等待直到你的关键部分完成。
请参阅(作为此类各种问题的一个很好的参考)W。Richard Steven的 UNIX环境中的高级编程。我的版本中的第10.8节“可靠的信号术语和语义”是我在回答之前检查过的,以确定我的答案。
我的Ubuntu笔记本电脑上的更新:,“man sigprocmask”(如果安装了manpages-dev)似乎是学习信号阻塞的手册页。同样,正如Python文档所述,这在所有Unix下都不可用,所以如果你真的使用“sigprocmask”,不要指望你的旧Irix或AIX盒子运行你的Python程序。但也许你并不担心。 : - )