When I run servers like WEBrick or an instance of TCPServer, it’s
unclear to me how to stop them, especially under Windows. Ctrl-C seems
to kill the server, but not the Ruby application in which it is
running. How can I detect that Ctrl-C has been pressed? Ctrl-Break
sends an INT signal that I can catch with trap(‘INT’). I’m not sure
what triggers trap(‘TERM’), but it’s not Ctrl-C.

When I run servers like WEBrick or an instance of TCPServer, it’s
unclear to me how to stop them, especially under Windows. Ctrl-C seems
to kill the server, but not the Ruby application in which it is
running. How can I detect that Ctrl-C has been pressed? Ctrl-Break
sends an INT signal that I can catch with trap(‘INT’). I’m not sure
what triggers trap(‘TERM’), but it’s not Ctrl-C.

My WEBrick code tends to have this line:

RUBY_PLATFORM =~ /mingw|mswin32/ ? signal = 1 : signal = “HUP”

and then, later on

s is the server instance

trap( signal ){ s.shutdown }

I also often map a ‘quit’ URL so I can stop the server through a
browser or wget: