4

ctrl-breakキーの組み合わせによって発生した例外をキャッチするにはどうすればよいですか? 私はWindows(の内部cmd.exe)でrubyプログラムを実行しており、キャプチャしますctrl-c次のようなもので問題ありません:

rescue Interrupt
    puts 'Doing cleanup task before exiting'
    raise

プログラムが終了する (ファイルを削除する) 前に行うクリーンアップ タスクがあり、これはctrl-で動作しcます。ctrl-でプログラムを終了すると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

Ruby 2.0 の時点では、サポートされていないと思います。

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

ArgumentError: unsupported signal SIGBREAK
于 2013-09-06T16:51:18.047 に答える