~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/daemon.py

  • Committer: Jelmer Vernooij
  • Date: 2008-07-26 14:09:59 UTC
  • mto: This revision was merged to the branch mainline in revision 184.
  • Revision ID: jelmer@samba.org-20080726140959-rxkq2kb69rjdgqe8
Add simple manual pages for loggerhead.

Show diffs side-by-side

added added

removed removed

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