OSDN Git Service

Replaced mongrel with thin
[redminele/redminele.git] / ruby / lib / ruby / gems / 1.8 / gems / daemons-1.1.4 / lib / daemons / pid.rb
diff --git a/ruby/lib/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/pid.rb b/ruby/lib/ruby/gems/1.8/gems/daemons-1.1.4/lib/daemons/pid.rb
new file mode 100644 (file)
index 0000000..d76a5e0
--- /dev/null
@@ -0,0 +1,109 @@
+require 'open3'
+
+
+module Daemons
+
+  class Pid
+  
+    def Pid.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 Errno::ESRCH
+        return false
+      rescue ::Exception   # for example on EPERM (process exists but does not belong to us)
+        return true
+      #rescue Errno::EPERM
+      #  return false
+      end
+    end
+    
+  #  def Pid.running?(pid, additional = nil)
+  #    match_pid = Regexp.new("^\\s*#{pid}\\s")
+  #    got_match = false
+  #
+  #    #ps_all = IO.popen('ps ax') # the correct syntax is without a dash (-) !
+  #    ps_in, ps_out, ps_err = Open3.popen3('ps ax') # the correct syntax is without a dash (-) !
+  #    
+  #    return true unless ps_out.gets
+  #    
+  #    begin
+  #      ps_out.each { |psline|
+  #        next unless psline =~ match_pid
+  #        got_match = true
+  #        got_match = false if additional and psline !~ /#{additional}/
+  #        break
+  #      }
+  #    ensure
+  #      begin; begin; ps_in.close; rescue ::Exception; end; begin; ps_out.close; rescue ::Exception; end; ps_err.close; rescue ::Exception; end
+  #    end
+  #    
+  #    # an alternative would be to use the code below, but I don't know whether this is portable
+  #    # `ps axo pid=`.split.include? pid.to_s
+  #     
+  #    return got_match
+  #  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 Pid.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
+          raise 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?
+      return Pid.running?(pid())
+    end
+    
+    # Cleanup method
+    def cleanup
+    end
+    
+    # Exist? method
+    def exist?
+      true
+    end
+    
+  end  
+  
+  
+end
\ No newline at end of file