diff options
author | Robert Gogolok <gogo@cs.uni-sb.de> | 2007-12-28 10:26:58 +0000 |
---|---|---|
committer | Robert Gogolok <gogo@cs.uni-sb.de> | 2007-12-28 10:26:58 +0000 |
commit | 70a9fa998fb9ded34d74614d0d31219ae279b84c (patch) | |
tree | ed89043f5aca2924c0ee3c19bfa0607a1a7c4fb0 /src/lib | |
parent | eec4aa89b3a1713125d0117f7b15fb2a1ce78265 (diff) | |
download | bcfg2-70a9fa998fb9ded34d74614d0d31219ae279b84c.tar.gz bcfg2-70a9fa998fb9ded34d74614d0d31219ae279b84c.tar.bz2 bcfg2-70a9fa998fb9ded34d74614d0d31219ae279b84c.zip |
move daemonize support to own module
git-svn-id: https://svn.mcs.anl.gov/repos/bcfg/trunk/bcfg2@4113 ce84e21b-d406-0410-9b95-82705330c041
Diffstat (limited to 'src/lib')
-rw-r--r-- | src/lib/Daemon.py | 44 |
1 files changed, 44 insertions, 0 deletions
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()) |