Skip to content

Instantly share code, notes, and snippets.

@jacobo
Created March 29, 2013 23:39
Show Gist options
  • Save jacobo/5274420 to your computer and use it in GitHub Desktop.
Save jacobo/5274420 to your computer and use it in GitHub Desktop.
class TrapLoop
trap('TERM') { stop! }
trap('INT') { stop! }
trap('SIGTERM') { stop! }
def self.stop!
@loop = false
end
def self.safe_exit_point!
if @started && !@loop
raise Interrupt
end
end
def self.start(&block)
@started = true
@loop = true
while(@loop) do
yield
end
end
end
#use like this:
class Worker
def self.work!
puts "working"
sleep 2
puts "worked"
TrapLoop.safe_exit_point!
puts "more stuff"
sleep 2
puts "done"
end
end
begin
TrapLoop.start do
Worker.work!
end
rescue => e
puts e.inspect
end
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment