Removed some files + added .gitignore
[satega.git] / daemon.py
blob1057b986c900310fffc3d746970b4860b46e3693
1 # This code seems to be in public domain
2 # http://www.google.com/search?client=opera&rls=en&q=unix+daemon+double+fork&sourceid=opera&ie=utf-8&oe=utf-8
4 import sys, os
6 def daemonize():
8 # do the UNIX double-fork magic, see Stevens' "Advanced
9 # Programming in the UNIX Environment" for details (ISBN 0201563177)
10 try:
11 pid = os.fork()
12 if pid > 0:
13 # exit first parent
14 sys.exit(0)
15 except OSError, e:
16 print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror)
17 sys.exit(1)
19 # decouple from parent environment
20 os.chdir("/")
21 os.setsid()
22 os.umask(0)
24 # do second fork
25 try:
26 pid = os.fork()
27 if pid > 0:
28 # exit from second parent, print eventual PID before
29 print "Daemon PID %d" % pid
30 sys.exit(0)
31 except OSError, e:
32 print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror)
33 sys.exit(1)
35 #TODO - move standard output to log file/library
36 # -there should be more here - see comments on http://aspn.activestate.com/ASPN/Cookbook/Python/Recipe/66012
37 # Redirect standard file descriptors
38 sys.stdin = open('/dev/null', 'r')
39 sys.stdout = open('/dev/null', 'w')
40 sys.stderr = open('/dev/null', 'w')