class Mimi::Signal
Constants
- VERSION
Attributes
signal[R]
Public Class Methods
new(signal, &block)
click to toggle source
Creates a signal handler and installs it.
@see Mimi::Signal.trap
# File lib/mimi/signal.rb, line 32 def initialize(signal, &block) self.class.handlers[signal.to_sym] ||= { old_trap: nil, blocks: [] } self.class.handlers[signal.to_sym][:blocks].push(block) self.class.handlers[signal.to_sym][:old_trap] ||= Kernel.trap(signal) { self.class.queue << signal.to_sym } self.class.start end
Private Class Methods
start()
click to toggle source
Starts the background thread which monitors queued signals. Invoked implicitly when any signal handler is installed
# File lib/mimi/signal.rb, line 56 def self.start return if @thread @thread = Thread.new do loop do signal = queue.pop # it's blocking handlers[signal][:blocks].each(&:call) if handlers[signal] end end end
stop()
click to toggle source
Stops the Mimi::Signal
, untraps all trapped signals
# File lib/mimi/signal.rb, line 68 def self.stop return unless @thread handlers.keys.each do |signal| Kernel.trap(signal, handlers[signal][:old_trap]) end @thread.kill @thread = nil @handlers = nil end
trap(*signals, &block)
click to toggle source
Traps a signal (or multiple signals) and installs the signal handler
@param [Array<String,Symbol>] signals
@example
Mimi::Signal.trap('INT', 'TERM') do # graceful shutdown end
# File lib/mimi/signal.rb, line 49 def self.trap(*signals, &block) signals.each { |s| new(s, &block) } end