~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/daemon.py

  • Committer: Canonical.com Patch Queue Manager
  • Date: 2007-09-10 17:30:17 UTC
  • mfrom: (138.1.1 mwhudson-sucks)
  • Revision ID: pqm@pqm.ubuntu.com-20070910173017-teattztsb8ep0aer
[trivial] so i cleaned up the tests, but also broke them :( need to look at getting PQM to run the loggerhead tests...

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# daemon code from ASPN
2
 
#
3
2
 
4
3
import os
 
4
import sys
5
5
 
6
6
 
7
7
def daemonize(pidfile, home):
10
10
    background as a daemon.
11
11
    """
12
12
 
 
13
    UMASK = 0
13
14
    WORKDIR = "/"
14
15
    REDIRECT_TO = getattr(os, 'devnull', '/dev/null')
15
16
    MAXFD = 1024
19
20
    except OSError, e:
20
21
        raise Exception("%s [%d]" % (e.strerror, e.errno))
21
22
 
22
 
    if pid == 0:      # The first child.
 
23
    if (pid == 0):      # The first child.
23
24
        os.setsid()
24
25
 
25
26
        try:
26
 
            pid = os.fork()     # Fork a second child.
 
27
            pid = os.fork()     # Fork a second child.
27
28
        except OSError, e:
28
 
            raise Exception("%s [%d]" % (e.strerror, e.errno))
 
29
            raise Exception, "%s [%d]" % (e.strerror, e.errno)
29
30
 
30
 
        if pid == 0:  # The second child.
 
31
        if (pid == 0):  # The second child.
31
32
            os.chdir(WORKDIR)
 
33
            os.umask(UMASK)
32
34
        else:
33
 
            os._exit(0) # Exit parent (the first child) of the second child.
 
35
            os._exit(0) # Exit parent (the first child) of the second child.
34
36
    else:
35
 
        os._exit(0)     # Exit parent of the first child.
36
 
 
37
 
    import resource            # Resource usage information.
38
 
    maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
39
 
    if (maxfd == resource.RLIM_INFINITY):
40
 
        maxfd = MAXFD
41
 
 
42
 
    fd = os.open(REDIRECT_TO, os.O_RDONLY)
43
 
    os.dup2(fd, 0)
44
 
    fd = os.open(REDIRECT_TO, os.O_WRONLY)
45
 
    os.dup2(fd, 1)
46
 
    os.dup2(fd, 2)
47
 
 
48
 
    # Iterate through and close all other file descriptors.
49
 
    for fd in range(3, maxfd):
50
 
        try:
51
 
            os.close(fd)
52
 
        except OSError:        # ERROR, fd wasn't open to begin with (ignored)
53
 
            pass
 
37
        os._exit(0)     # Exit parent of the first child.
 
38
 
 
39
    #import resource            # Resource usage information.
 
40
    #maxfd = resource.getrlimit(resource.RLIMIT_NOFILE)[1]
 
41
    #if (maxfd == resource.RLIM_INFINITY):
 
42
    #    maxfd = MAXFD
 
43
  
 
44
    # Iterate through and close all file descriptors.
 
45
    #for fd in range(3, maxfd):
 
46
    #    try:
 
47
    #        os.close(fd)
 
48
    #    except OSError:        # ERROR, fd wasn't open to begin with (ignored)
 
49
    #        pass
 
50
 
 
51
    # This call to open is guaranteed to return the lowest file descriptor,
 
52
    # which will be 0 (stdin), since it was closed above.
 
53
    #os.open(REDIRECT_TO, os.O_RDWR)    # standard input (0)
 
54
 
 
55
    # Duplicate standard input to standard output and standard error.
 
56
    #os.dup2(0, 1)                      # standard output (1)
 
57
    #os.dup2(0, 2)                      # standard error (2)
54
58
 
55
59
    f = open(pidfile, 'w')
56
 
    f.write('%d\n' % os.getpid())
 
60
    f.write('%d\n' % (os.getpid(),))
 
61
    f.write('%s\n' % (home,))
57
62
    f.close()
58
63
 
59
64