This shows you the differences between two versions of the page.
— |
pythondaemon [2014/10/25 21:52] (current) |
||
---|---|---|---|
Line 1: | Line 1: | ||
+ | ==== Daemon example ==== | ||
+ | <code lang='python'> | ||
+ | import sys, os | ||
+ | def main(): | ||
+ | """ A demo daemon main routine, write a datestamp to | ||
+ | /tmp/daemon-log every 10 seconds. | ||
+ | """ | ||
+ | import time | ||
+ | |||
+ | f = open("/tmp/daemon-log", "w") | ||
+ | while 1: | ||
+ | f.write('%s\n' % time.ctime(time.time())) | ||
+ | f.flush() | ||
+ | time.sleep(10) | ||
+ | |||
+ | |||
+ | if __name__ == "__main__": | ||
+ | # do the UNIX double-fork magic, see Stevens' "Advanced | ||
+ | # Programming in the UNIX Environment" for details (ISBN 0201563177) | ||
+ | try: | ||
+ | pid = os.fork() | ||
+ | if pid > 0: | ||
+ | # exit first parent | ||
+ | sys.exit(0) | ||
+ | except OSError, e: | ||
+ | print >>sys.stderr, "fork #1 failed: %d (%s)" % (e.errno, e.strerror) | ||
+ | sys.exit(1) | ||
+ | |||
+ | # decouple from parent environment | ||
+ | os.chdir("/") | ||
+ | os.setsid() | ||
+ | os.umask(0) | ||
+ | |||
+ | # do second fork | ||
+ | try: | ||
+ | pid = os.fork() | ||
+ | if pid > 0: | ||
+ | # exit from second parent, print eventual PID before | ||
+ | print "Daemon PID %d" % pid | ||
+ | sys.exit(0) | ||
+ | except OSError, e: | ||
+ | print >>sys.stderr, "fork #2 failed: %d (%s)" % (e.errno, e.strerror) | ||
+ | sys.exit(1) | ||
+ | |||
+ | # start the daemon main loop | ||
+ | main() | ||
+ | |||
+ | </code> | ||
+ | ---- | ||
+ | * [[pythoninfo|Back to Python]] |