Ctrl+Cが押された場合の処理を指定する
Signal.trapでシグナルが送付された場合の処理を指定できます。これを使ってプログラム実行中にCtrl+Cが押された場合(SIGINTのシグナルが送付される)に特別な処理を実行できます。
# Ctrl + C で停止させられた場合の処理を登録 Signal.trap(:INT){ puts "SIGINT" exit(0) } # 五秒ごとに"test"と出力しつつループ loop { puts "test" sleep 5 }
実行。
$ ruby signal-trap.rb
Ctrl+Cを押してみます。指定したブロックが実行されています!
test test SIGINT
killされた場合などは別のシグナルが送られるようなので、それぞれ適切な処理を指定しておくと安全にプログラムを終了させることができます。