陷阱信号时如何容纳其他信号处理程序?

时间:2018-03-20 20:34:52

标签: ruby process signals

在Jesse Storimer的优秀书籍Working With Unix Processes中,他建议使用这种方法来捕获信号,同时容纳以前的处理程序:

old_handler = trap(:QUIT) {
  # do some cleanup
  puts 'All done!'

  old_handler.call if old_handler.respond_to?(:call)
}

这永远不会退出。假设前一个处理程序调用{​​{1}},那很好。但是,如果没有其他信号处理程序,只有默认处理程序呢?我的测试表明,这意味着流程永不退出,因为exit不提供默认流程(trap将是字符串old_handler)。

从书中的前一个例子开始,同时展示其他内容:

"DEFAULT"

因此,如果old_handler = trap(:INT) {   old_handler.call   puts 'This is the second handler'   exit } 调用old_handler,程序将退出,我们将永远不需要。但如果没有,我们会照顾exit。这似乎很好。有点奇怪的是,所有处理程序都必须负责可能成为最终结束程序的人,知道其中只有一个将会出现。

无论如何,假设这是真的,这就是我所提出的可以普遍使用的模式:

exit

这是一个正确的方法吗?我缺少什么?

0 个答案:

没有答案