2012-09-25 12:34:10 -04:00
|
|
|
module Process
|
2013-11-20 18:05:51 -05:00
|
|
|
|
|
|
|
# This overrides the default version because it is broken if it
|
|
|
|
# exists.
|
|
|
|
|
2012-09-25 12:34:10 -04:00
|
|
|
def self.daemon(nochdir=false, noclose=false)
|
|
|
|
exit if fork # Parent exits, child continues.
|
|
|
|
|
|
|
|
Process.setsid # Become session leader.
|
|
|
|
|
|
|
|
exit if fork # Zap session leader. See [1].
|
|
|
|
|
|
|
|
Dir.chdir "/" unless nochdir # Release old working directory.
|
|
|
|
|
|
|
|
if !noclose
|
2013-06-19 19:16:15 -04:00
|
|
|
null = File.open "/dev/null", "w+"
|
2012-09-25 12:34:10 -04:00
|
|
|
STDIN.reopen null
|
|
|
|
STDOUT.reopen null
|
|
|
|
STDERR.reopen null
|
|
|
|
end
|
|
|
|
|
|
|
|
0
|
2013-11-20 18:05:51 -05:00
|
|
|
end
|
2012-09-25 12:34:10 -04:00
|
|
|
end
|