diff options
4 files changed, 30 insertions, 10 deletions
diff --git a/activesupport/CHANGELOG b/activesupport/CHANGELOG index a911361d3b..3ee9ed925c 100644 --- a/activesupport/CHANGELOG +++ b/activesupport/CHANGELOG @@ -1,5 +1,7 @@ *SVN* +* Added Ruby 1.8 implementation of Process.daemon + * Duration #since and #ago with no argument (e.g., 5.days.ago) return TimeWithZone when config.time_zone is set. Introducing Time.current, which returns Time.zone.now if config.time_zone is set, otherwise just returns Time.now [Geoff Buesing] * Time#since behaves correctly when passed a Duration. Closes #11527 [kemiller] diff --git a/activesupport/lib/active_support/core_ext/kernel/daemonizing.rb b/activesupport/lib/active_support/core_ext/kernel/daemonizing.rb index 0e78819fdf..ed9d1f9bf2 100644 --- a/activesupport/lib/active_support/core_ext/kernel/daemonizing.rb +++ b/activesupport/lib/active_support/core_ext/kernel/daemonizing.rb @@ -2,14 +2,6 @@ module Kernel # Turns the current script into a daemon process that detaches from the console. # It can be shut down with a TERM signal. def daemonize - exit if fork # Parent exits, child continues. - Process.setsid # Become session leader. - exit if fork # Zap session leader. See [1]. - Dir.chdir "/" # Release old working directory. - File.umask 0000 # Ensure sensible umask. Adjust as needed. - STDIN.reopen "/dev/null" # Free file descriptors and - STDOUT.reopen "/dev/null", "a" # point them somewhere sensible. - STDERR.reopen STDOUT # STDOUT/ERR should better go to a logfile. - trap("TERM") { exit } + Process.daemon end -end
\ No newline at end of file +end diff --git a/activesupport/lib/active_support/core_ext/process.rb b/activesupport/lib/active_support/core_ext/process.rb new file mode 100644 index 0000000000..0b0bc6dc69 --- /dev/null +++ b/activesupport/lib/active_support/core_ext/process.rb @@ -0,0 +1 @@ +require 'active_support/core_ext/process/daemon' diff --git a/activesupport/lib/active_support/core_ext/process/daemon.rb b/activesupport/lib/active_support/core_ext/process/daemon.rb new file mode 100644 index 0000000000..95ad5f8a5d --- /dev/null +++ b/activesupport/lib/active_support/core_ext/process/daemon.rb @@ -0,0 +1,25 @@ +if RUBY_VERSION < "1.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 + end +end |