diff --git a/daemon3.py b/daemon3.py new file mode 100644 index 0000000..d27bacc --- /dev/null +++ b/daemon3.py @@ -0,0 +1,44 @@ +import sys, os + +def main(): + """ An example daemon main routine; writes a datestamp to file + /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's book "Advanced + # Programming in the UNIX Environment" (Addison-Wesley) for details + try: + pid = os.fork() + if pid > 0: + # Exit first parent + sys.exit(0) + except OSError as e: + print ("fork #1 failed: %d (%s)" % (e.errno, e.strerror), file=sys.stderr) + 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 exiting + print ("Daemon PID %d" % pid) + sys.exit(0) + except OSError as e: + print ("fork #2 failed: %d (%s)" % (e.errno, e.strerror), file=sys.stderr) + sys.exit(1) + + # Start the daemon main loop + main( )