aboutsummaryrefslogblamecommitdiffstats
path: root/activesupport/lib/active_support/core_ext/process/daemon.rb
blob: f5202ddee41145bb8a4012926bbf61a532ef6a7f (plain) (tree)
1
2
3
4
5
6
7
8
9




                                                                     
 


                                                                     
 
                                                                               
 




                                                                     
 
                         
 

                                 
   
module Process
  def self.daemon(nochdir = nil, noclose = nil)
    exit if fork                     # Parent exits, child continues.
    Process.setsid                   # Become session leader.
    exit if fork                     # Zap session leader. See [1].

    unless nochdir
      Dir.chdir "/"                  # Release old working directory.
    end

    File.umask 0000                  # Ensure sensible umask. Adjust as needed.

    unless noclose
      STDIN.reopen "/dev/null"       # Free file descriptors and
      STDOUT.reopen "/dev/null", "a" # point them somewhere sensible.
      STDERR.reopen '/dev/null', 'a'
    end

    trap("TERM") { exit }

    return 0
  end unless respond_to?(:daemon)
end