4

如何捕获ctrl-break组合键引发的异常?我在 Windows 上运行一个 ruby​​ 程序(在内部cmd.exe),我捕捉到了ctrl-c用这样的东西很好:

rescue Interrupt
    puts 'Doing cleanup task before exiting'
    raise

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

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

4

2 回答 2

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" }
于 2013-09-06T16:50:18.017 回答
0

As of Ruby 2.0, I don't think it is supported.

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

ArgumentError: unsupported signal SIGBREAK
于 2013-09-06T16:51:18.047 回答