aboutsummaryrefslogtreecommitdiffstats
path: root/libpathod/utils.py
diff options
context:
space:
mode:
Diffstat (limited to 'libpathod/utils.py')
-rw-r--r--libpathod/utils.py28
1 files changed, 28 insertions, 0 deletions
diff --git a/libpathod/utils.py b/libpathod/utils.py
index 110a7170..d4160a23 100644
--- a/libpathod/utils.py
+++ b/libpathod/utils.py
@@ -1,4 +1,5 @@
import os
+import sys
from netlib import tcp
SSLVERSIONS = {
@@ -110,3 +111,30 @@ class Data:
data = Data(__name__)
+
+def daemonize(stdin='/dev/null', stdout='/dev/null', stderr='/dev/null'):
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError, e:
+ sys.stderr.write("fork #1 failed: (%d) %s\n" % (e.errno, e.strerror))
+ sys.exit(1)
+ os.chdir("/")
+ os.umask(0)
+ os.setsid()
+ try:
+ pid = os.fork()
+ if pid > 0:
+ sys.exit(0)
+ except OSError, e:
+ sys.stderr.write("fork #2 failed: (%d) %s\n" % (e.errno, e.strerror))
+ sys.exit(1)
+ si = open(stdin, 'rb')
+ so = open(stdout, 'a+b')
+ se = open(stderr, 'a+b', 0)
+ os.dup2(si.fileno(), sys.stdin.fileno())
+ os.dup2(so.fileno(), sys.stdout.fileno())
+ os.dup2(se.fileno(), sys.stderr.fileno())
+
+