use Signal.trap rather than rescue Interrupt