3 def daemonize(logfile=None, errfile=None, pidfile=None):
4 devnull = os.devnull if hasattr(os, 'devnull') else '/dev/null'
8 if path.startswith('/'):
10 return os.path.join(initwd, path)
23 raise Exception('Failed daemonization: %s' % str(e))
28 os.open(devnull, os.O_RDWR)
30 def open_trunc(fname):
32 os.O_WRONLY|os.O_CREAT)
36 def open_or_dup(fname, fd=None):
38 return open_trunc(absolutize(fname))
42 open_or_dup(logfile, (0, 1))
43 open_or_dup(errfile, (1, 2))
47 pidfile = absolutize(pidfile)
48 fd = open_trunc(pidfile)
49 os.write(fd, str(pid))
54 sys.exitfunc = remove_pidfile