class DopCommon::SignalHandler
Constants
- DEFAULT_SIGNALS
Public Class Methods
new()
click to toggle source
# File lib/dop_common/signal_handler.rb, line 15 def initialize @signal_queue = [] @self_reader, @self_writer = IO.pipe end
Public Instance Methods
handle_signals(*signals) { |shift| ... }
click to toggle source
# File lib/dop_common/signal_handler.rb, line 20 def handle_signals(*signals) signals = DEFAULT_SIGNALS if signals.empty? old_handlers = setup_signal_traps(signals) loop do begin if @signal_queue.any? yield(@signal_queue.shift) if block_given? else IO.select([@self_reader]) @self_reader.read_nonblock(1) end rescue break end end teardown_signal_traps(old_handlers) end
Private Instance Methods
setup_signal_traps(signals)
click to toggle source
# File lib/dop_common/signal_handler.rb, line 40 def setup_signal_traps(signals) signals.each_with_object({}) do |signal, old_handlers| DopCommon.log.debug("Installing trap for signal #{signal.to_s}") old_handlers[signal] = Signal.trap(signal) do @signal_queue << { signal => Time.now } @self_writer.write_nonblock('.') end end end
teardown_signal_traps(old_handlers)
click to toggle source
# File lib/dop_common/signal_handler.rb, line 50 def teardown_signal_traps(old_handlers) old_handlers.each do |signal, old_handler| DopCommon.log.debug("Removing trap for signal #{signal.to_s}") Signal.trap(signal, old_handler) end end