Module: Daemonize
- Defined in:
- lib/daemonize.rb
Constant Summary collapse
- VERSION =
"0.1.2"
Instance Method Summary collapse
-
#daemonize(oldmode = 0, closefd = false) ⇒ Object
This method causes the current running process to become a daemon If closefd is true, all existing file descriptors are closed.
-
#safefork ⇒ Object
Try to fork if at all possible retrying every 5 sec if the maximum process limit for the system has been reached.
Instance Method Details
#daemonize(oldmode = 0, closefd = false) ⇒ Object
This method causes the current running process to become a daemon If closefd is true, all existing file descriptors are closed
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 |
# File 'lib/daemonize.rb', line 24 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 |
#safefork ⇒ Object
Try to fork if at all possible retrying every 5 sec if the maximum process limit for the system has been reached
6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 |
# File 'lib/daemonize.rb', line 6 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 |