1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 53 54 55 56 57 58 59 60 61 62 63 64 65 66 67 68 69 70 71 72 73 74 75 76 77 78
|
require 'daemons/exceptions'
module Daemons
class Pid
def self.running?(pid)
return false unless pid
# Check if process is in existence
# The simplest way to do this is to send signal '0'
# (which is a single system call) that doesn't actually
# send a signal
begin
Process.kill(0, pid)
return true
rescue TimeoutError
raise
rescue Errno::ESRCH
return false
rescue ::Exception # for example on EPERM (process exists but does not belong to us)
return true
end
end
# Returns the directory that should be used to write the pid file to
# depending on the given mode.
#
# Some modes may require an additionaly hint, others may determine
# the directory automatically.
#
# If no valid directory is found, returns nil.
#
def self.dir(dir_mode, dir, script)
# nil script parameter is allowed as long as dir_mode is not :script
return nil if dir_mode == :script && script.nil?
case dir_mode
when :normal
return File.expand_path(dir)
when :script
return File.expand_path(File.join(File.dirname(script), dir))
when :system
return '/var/run'
else
fail Error.new("pid file mode '#{dir_mode}' not implemented")
end
end
# Initialization method
def initialize
end
# Get method
def pid
end
# Set method
def pid=(p)
end
# Check whether the process is running
def running?
Pid.running?(pid)
end
# Cleanup method
def cleanup
end
# Zap method
def zap
end
# Exist? method
def exist?
true
end
end
end
|