Sha256: 2fbc01d216f7beac039506dc78bcb34e3604b166d4c7066c8c821c3e1530cfa8
Contents?: true
Size: 1.1 KB
Versions: 6
Compression:
Stored size: 1.1 KB
Contents
module MultiDaemons class Pid KILL_TIMEOUT = 30 def self.running?(pid) return false unless pid begin Process.kill(0, pid) return true rescue Errno::ESRCH return false rescue Exception return true end end def self.force_kill(pids, timeout = KILL_TIMEOUT) Timeout.timeout(force_kill_timeout(timeout), Timeout::Error) do pids.each do |pid| sleep(0.5) while Pid.running?(pid) end end true rescue Timeout::Error puts 'Force stopping processes' pids.each do |pid| begin Process.kill('KILL', pid) rescue Errno::ESRCH end end begin Timeout.timeout(default_timeout, Timeout::Error) do pids.each do |pid| sleep 1 while Pid.running?(pid) end end rescue Timeout::Error puts 'Can not stop processes' return false end end def self.force_kill_timeout(timeout) timeout || KILL_TIMEOUT end def self.default_timeout KILL_TIMEOUT end end end
Version data entries
6 entries across 6 versions & 1 rubygems