Sha256: 368494ac8dec0bc15cd995fbe368e1477221634f71b019eaf70d8e0ea3e10be2

Contents?: true

Size: 1.74 KB

Versions: 8

Compression:

Stored size: 1.74 KB

Contents

######################################
# Begin Daemonize code provided by Travis Whitton
# http://grub.ath.cx/daemonize/

module Daemonize
  #VERSION = "0.1.2"

  # Try to fork if at all possible retrying every 5 sec if the
  # maximum process limit for the system has been reached
  def safefork
    tryagain = true

    while tryagain
      tryagain = false
      begin
        if pid = fork
          return pid
        end
      rescue Errno::EWOULDBLOCK
        sleep 5
        tryagain = true
      end
    end
  end

  # This method causes the current running process to become a daemon
  # If closefd is true, all existing file descriptors are closed
  def daemonize(oldmode=0, closefd=false)
    srand # Split rand streams between spawning and daemonized process
    safefork and exit # Fork and exit from the parent

    # Detach from the controlling terminal
    unless sess_id = Process.setsid
      raise 'Cannot detach from controlled terminal'
    end

    # Prevent the possibility of acquiring a controlling terminal
    if oldmode.zero?
      trap 'SIGHUP', 'IGNORE'
      exit if pid = safefork
    end

    Dir.chdir "/"   # Release old working directory
    File.umask 0000 # Insure sensible umask

    if closefd
      # Make sure all file descriptors are closed
      ObjectSpace.each_object(IO) do |io|
        unless [STDIN, STDOUT, STDERR].include?(io)
          io.close rescue nil
        end
      end
    end

    STDIN.reopen "/dev/null"       # Free file descriptors and
    STDOUT.reopen "/dev/null", "a" # point them somewhere sensible
    STDERR.reopen STDOUT           # STDOUT/STDERR should go to a logfile
    return oldmode ? sess_id : 0   # Return value is mostly irrelevant
  end
end

# End Daemonize
######################################

Version data entries

8 entries across 8 versions & 1 rubygems

Version Path
airake-0.1.10 lib/airake/daemonize.rb
airake-0.1.3 lib/airake/daemonize.rb
airake-0.1.4 lib/airake/daemonize.rb
airake-0.1.5 lib/airake/daemonize.rb
airake-0.1.6 lib/airake/daemonize.rb
airake-0.1.7 lib/airake/daemonize.rb
airake-0.1.8 lib/airake/daemonize.rb
airake-0.1.9 lib/airake/daemonize.rb