如何捕获 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 关闭它,但我仍然希望我的救援功能能够起作用。我需要捕获另一种异常类型吗?
答案 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