Doing some work before exiting (Ruby)
When running a few programs (like Web server or a script), do you notice that sometimes they print out "Good bye" message before exiting? I was wondering if I could do a similar thing in Ruby and it turned out to be pretty easy.
First, I learned that when a process is killed by the system when it receives the signal SIGINT (interrupt) or SIGTERM (terminate). What we should do is to capture these signals and do our actions.
Here is my super simple Ruby script which prints "Shutting down gracefully" message to the console when the program exits
# Signal catching
def shut_down
puts "\nShutting down gracefully..."
sleep 1
end
puts "I have PID #{Process.pid}"
# Trap ^C
Signal.trap("INT") {
shut_down
exit
}
# Trap `Kill `
Signal.trap("TERM") {
shut_down
exit
}
sleep 10
Put this code into a file called test.rb
and run it with ruby test.rb
, you would see the message indicating the program is running. You can press Ctrl + C
to exit the program and see the exiting message
I have PID 49854
^C
Shutting down gracefully...
If you want to capture both INT and TERM signal, you can also use at_exit
method like this
at_exit do
puts "Shutting down gracefully..."
end
I myself rarely use these but it is helpful to know that they exist. Hope that helps.