Sha256: c4b7c4445207671975342d29edd12051b9bb5b93b06370d1ac0d2e63c421b5cb

Contents?: true

Size: 1.56 KB

Versions: 15

Compression:

Stored size: 1.56 KB

Contents

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

Version data entries

15 entries across 15 versions & 4 rubygems

Version Path
solutious-stella-0.5.5 lib/daemonize.rb
viking-biobot-0.0.1 lib/daemonize.rb
viking-biobot-0.0.2 lib/daemonize.rb
viking-biobot-0.0.3 lib/daemonize.rb
viking-biobot-0.0.4 lib/daemonize.rb
stella-0.5.5 lib/daemonize.rb
sugoi-mail-0.0.3 lib/daemonize.rb
sugoi-mail-0.1.0 lib/daemonize.rb
sugoi-mail-0.0.5 lib/daemonize.rb
sugoi-mail-0.0.0 lib/daemonize.rb
sugoi-mail-0.0.1 lib/daemonize.rb
sugoi-mail-0.0.2 lib/daemonize.rb
sugoi-mail-0.1.5 lib/daemonize.rb
sugoi-mail-0.3.0 lib/daemonize.rb
sugoi-mail-0.3.2 lib/daemonize.rb