5 def become_daemon(our_home_dir
='.', out_log
='/dev/null',
6 err_log
='/dev/null', umask
=022):
7 "Robustly turn into a UNIX daemon, running in our_home_dir."
11 sys
.exit(0) # kill off parent
13 sys
.stderr
.write("fork #1 failed: (%d) %s\n" % (e
.errno
, e
.strerror
))
16 os
.chdir(our_home_dir
)
24 sys
.stderr
.write("fork #2 failed: (%d) %s\n" % (e
.errno
, e
.strerror
))
27 si
= open('/dev/null', 'r')
28 so
= open(out_log
, 'a+', 0)
29 se
= open(err_log
, 'a+', 0)
30 os
.dup2(si
.fileno(), sys
.stdin
.fileno())
31 os
.dup2(so
.fileno(), sys
.stdout
.fileno())
32 os
.dup2(se
.fileno(), sys
.stderr
.fileno())
33 # Set custom file descriptors so that they get proper buffering.
34 sys
.stdout
, sys
.stderr
= so
, se
36 def become_daemon(our_home_dir
='.', out_log
=None, err_log
=None, umask
=022):
38 If we're not running under a POSIX system, just simulate the daemon
39 mode by doing redirections and directory changing.
41 os
.chdir(our_home_dir
)
47 sys
.stderr
= open(err_log
, 'a', 0)
49 sys
.stderr
= NullDevice()
51 sys
.stdout
= open(out_log
, 'a', 0)
53 sys
.stdout
= NullDevice()
56 "A writeable object that writes to nowhere -- like /dev/null."