Class: Redispot::Server::Killer

Inherits:
Object
  • Object
show all
Defined in:
lib/redispot/server.rb

Overview

:nodoc

Instance Method Summary collapse

Constructor Details

#initialize(redis_pid, timeout = 3) ⇒ Killer

Returns a new instance of Killer.



175
176
177
178
179
# File 'lib/redispot/server.rb', line 175

def initialize (redis_pid, timeout = 3)
  @owner_pid = Process.pid
  @redis_pid = redis_pid
  @timeout   = timeout
end

Instance Method Details

#call(*args) ⇒ Object



181
182
183
184
185
186
187
188
189
190
191
192
193
# File 'lib/redispot/server.rb', line 181

def call (*args)
  return if @owner_pid != Process.pid

  signals = [:TERM, :INT, :KILL]

  begin
    Process.kill(signals.shift, pid)
    Timeout.timeout(timeout) { Process.waitpid(pid) }
  rescue Timeout::Error => error
    retry unless signals.empty?
    raise error
  end
end