Module: Adhearsion::CustomDaemonizer
- Defined in:
- lib/adhearsion/foundation/custom_daemonizer.rb
Class Method Summary collapse
-
.daemonize(log_file = '/dev/null') ⇒ Object
This method causes the current running process to become a daemon.
-
.safefork ⇒ Object
Try to fork if at all possible retrying every 5 sec if the maximum process limit for the system has been reached.
Class Method Details
.daemonize(log_file = '/dev/null') ⇒ Object
This method causes the current running process to become a daemon
22 23 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 |
# File 'lib/adhearsion/foundation/custom_daemonizer.rb', line 22 def self.daemonize(log_file = '/dev/null') srand # Split rand streams between spawning and daemonized process # Fork, then exit when the child has exited below if pid = safefork ::Process.wait pid exit end # Detach from the controlling terminal raise 'Cannot detach from controlled terminal' unless sess_id = ::Process.setsid # Prevent the possibility of acquiring a controlling terminal # Fork again, allow a PID file to be written, then exit trap 'SIGHUP', 'IGNORE' if pid = safefork yield pid if block_given? exit end Dir.chdir "/" # Release old working directory File.umask 0000 # Ensure sensible umask STDIN.reopen "/dev/null" STDOUT.reopen '/dev/null', "a" STDERR.reopen log_file, "a" return sess_id 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
11 12 13 14 15 16 17 18 19 |
# File 'lib/adhearsion/foundation/custom_daemonizer.rb', line 11 def self.safefork begin pid = fork return pid if pid rescue Errno::EWOULDBLOCK sleep 5 retry end end |