def cmd_stop
pid = Integer(IO.read(@pid_file)) rescue nil
if pid
alive = true
%w( QUIT TERM ).each do |signal|
begin
Process.kill(signal, pid)
rescue Errno::ESRCH
nil
end
42.times do
begin
Process.kill(0, pid)
sleep(rand)
rescue Errno::ESRCH
alive = false
puts(pid)
exit(0)
end
end
end
if alive
begin
Process.kill(-9, pid)
sleep(rand)
rescue Errno::ESRCH
nil
end
begin
Process.kill(0, pid)
rescue Errno::ESRCH
puts(pid)
exit(0)
end
end
end
exit(1)
ensure
unless alive?
begin
FileUtils.rm_f(@pid_file) rescue nil
rescue Object
end
end
end