[Twisted-Python] twisted daemonize problem

Neal Becker ndbecker2 at gmail.com
Mon Nov 8 06:53:01 MST 2010


I try to daemonize twisted, but it uses 100% cpu.

The problem occurs in this code:

def daemonize(log_stdout=False, out_name=None, log_stderr=False, 
err_name=None):
    """
    Turn current process into a daemon
    """
    pid = os.fork()
    if (pid == 0):
##        os.chdir (workdir)
        os.setsid()
        maxfd = os.sysconf("SC_OPEN_MAX")
        for fd in range(0, maxfd):
            try:
                os.close(fd)
            except OSError:   # ERROR (ignore)
                pass

        # Redirect the standard file descriptors to /dev/null.  <<<< HERE's 
THE PROBLEM
        os.open("/dev/null", os.O_RDONLY)    # standard input (0)
        os.open("/dev/null", os.O_RDWR)       # standard output (1)
        os.open("/dev/null", os.O_RDWR)       # standard error (2)


        if (not out_name):
            out_name = gen_name() + '.out'
        if (not err_name):
            err_name = gen_name() + '.err'
        if (log_stdout):
            sys.stdout = logger.logger (out_name)
        if (log_stderr):
            sys.stderr = logger.logger (err_name)
    else:
        print "forked pid", pid
        sys.exit (0)


If I comment out the lines that open /dev/null, everything is OK, but with 
those lines the process uses 100% cpu.

The actual twisted code (not shown) is 
class Spawner(xmlrpc.XMLRPC):
...
    r = Spawner()
    reactor.listenTCP(7080, server.Site(r))
    reactor.run()

This is on linux.





More information about the Twisted-Python mailing list