区分命令行Ruby脚本信号的最佳方法

时间:2015-07-10 12:50:20

标签: ruby exception-handling signals interrupt

我有一个命令行Ruby脚本,我需要区分不同的SignalException。具体来说,我想捕获并忽略control + c($("#chart_image").attr('src', this.id + "?" + d.getTime()); )并在收到控件+ \ {SIGINT)时退出脚本。

我仍然相对较新的Ruby,并希望了解实现目标的最佳(或规范)方式。我也想知道是否有可能遇到操作系统的差异(我目前正在运行OS X,但我的解决方案是否适用于Windows,Linux等?)

我能够以两种不同的方式获得可能的信号列表:

  1. 来自bash:SIGQUIT(这很好,因为它显示控制键组合)
  2. 通过IRB:stty -a
  3. 以下是我如何玩这些东西:

    Signal.list

1 个答案:

答案 0 :(得分:3)

捕获信号的正确方法是Signal.trap

Signal.trap('QUIT') do
  puts "Shutting down..."
  exit
end

Signal.trap('INT', 'IGNORE')

链接的文档对操作系统差异有一些评论,特别是:

  

可用信号名称及其解释列表取决于系统。信号传递语义也可能因系统而异;特别是信号传递可能并不总是可靠的。