class Procodile::SignalHandler
Attributes
pipe[R]
Public Class Methods
new(*signals)
click to toggle source
# File lib/procodile/signal_handler.rb, line 10 def initialize(*signals) @handlers = {} reader, writer = IO.pipe @pipe = {:reader => reader, :writer => writer} signals.each do |sig| Signal.trap(sig, proc { SignalHandler.queue << sig ; notice }) end end
queue()
click to toggle source
# File lib/procodile/signal_handler.rb, line 6 def self.queue Thread.main[:signal_queue] ||= [] end
Public Instance Methods
handle()
click to toggle source
# File lib/procodile/signal_handler.rb, line 37 def handle if signal = self.class.queue.shift Procodile.log nil, 'system', "Supervisor received #{signal} signal" if @handlers[signal] @handlers[signal].each(&:call) end end end
notice()
click to toggle source
# File lib/procodile/signal_handler.rb, line 33 def notice @pipe[:writer].write_nonblock('.') end
register(name, &block)
click to toggle source
# File lib/procodile/signal_handler.rb, line 28 def register(name, &block) @handlers[name] ||= [] @handlers[name] << block end
start()
click to toggle source
# File lib/procodile/signal_handler.rb, line 19 def start Thread.new do loop do handle sleep 1 end end end