Dealing with exit signals on Ruby
When working on CLIs it's useful to treat if the application exists. Image you have a long application and even if the user hits a <Ctrl+c>
to kill the process you still want to display the results so far.
There is a Ruby Kernel method at_exit that runs the block passed to it if the current process exists. Here is an example:
# print_at_exit.rb
at_exit { puts "Come back later!" }
puts "sleeping for 5 secs"
sleep 5
If you run this file and wait it until it finishes you'll get:
ruby print_at_exit.rb {130}
#=> sleeping for 5 secs
#=>
#=> Come back later!
But now, if you run it and hit <Ctrl+c>
for finishing the process earlier you'll get:
ruby print_at_exit.rb
#=> sleeping for 5 secs
^C
#=> Come back later!
#=> print_at_exit.rb:6:in `sleep': Interrupt
#=> from print_at_exit.rb:6:in `<main>'
h/t @nikkypx
Tweet