From 70a9fa998fb9ded34d74614d0d31219ae279b84c Mon Sep 17 00:00:00 2001 From: Robert Gogolok Date: Fri, 28 Dec 2007 10:26:58 +0000 Subject: move daemonize support to own module git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4113 ce84e21b-d406-0410-9b95-82705330c041 --- src/lib/Daemon.py | 44 ++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 44 insertions(+) create mode 100644 src/lib/Daemon.py (limited to 'src/lib/Daemon.py') diff --git a/src/lib/Daemon.py b/src/lib/Daemon.py new file mode 100644 index 000000000..1886f5569 --- /dev/null +++ b/src/lib/Daemon.py @@ -0,0 +1,44 @@ +'''Bcfg2 daemon support''' +__revision__ = '$Revision' + +import os, sys + +def daemonize(filename): + '''Do the double fork/setsession dance''' + # Check if the pid is active + try: + pidfile = open(filename, "r") + oldpid = int(pidfile.readline()) + # getpgid() will retun an IO error if all fails + os.getpgid(oldpid) + pidfile.close() + + # If we got this far without exceptions, there is another instance + # running. Exit gracefully. + print "PID File (%s) exists and listed PID (%d) is active." % \ + (filename, oldpid) + raise SystemExit, 1 + except OSError: + pidfile.close() + except IOError: + # pid file doesn't + pass + + # Fork once + if os.fork() != 0: + os._exit(0) + os.setsid() # Create new session + pid = os.fork() + if pid != 0: + pidfile = open(filename, "w") + pidfile.write("%i" % pid) + pidfile.close() + os._exit(0) + os.chdir("/") + os.umask(0) + + null = open("/dev/null", "w+") + + os.dup2(null.fileno(), sys.__stdin__.fileno()) + os.dup2(null.fileno(), sys.__stdout__.fileno()) + os.dup2(null.fileno(), sys.__stderr__.fileno()) -- cgit v1.2.3-1-g7c22