救援/捕获ctrl-break

时间:2013-09-06 16:21:13

标签: ruby

如何捕获 ctrl - break 组合键引发的异常? 我正在Windows上运行ruby程序(在cmd.exe内部),我用这样的东西捕获 ctrl - c

rescue Interrupt
    puts 'Doing cleanup task before exiting'
    raise

我在程序退出(删除文件)之前要执行清理任务,这适用于 ctrl - c 。如果我使用 ctrl - break 退出程序,则不会捕获异常,并且它会在控制台中显示^C后终止。

有时我的程序进入 ctrl - c 没有响应的状态,我必须使用 ctrl - break 关闭它,但我仍然希望我的救援功能能够起作用。我需要捕获另一种异常类型吗?

2 个答案:

答案 0 :(得分:1)

ctrl - break 发送SIGBREAK,所以这是处理它的预期方法:

trap("BREAK") { puts "ctrl-break" }

不幸的是,Ruby不知道(SIG)BREAK,所以你必须使用信号编号,它应该是21

trap(21) { puts "ctrl-break" }

ctrl - c 可以据此处理,即:

trap("INT") { puts "ctrl-c" }

答案 1 :(得分:0)

从Ruby 2.0开始,我认为它不受支持。

Signal.trap("SIGBREAK") do
  puts "captured!"
end

ArgumentError: unsupported signal SIGBREAK