~loggerhead-team/loggerhead/trunk-rich

« back to all changes in this revision

Viewing changes to loggerhead/daemon.py

dead code

Show diffs side-by-side

added added

removed removed

Lines of Context:
1
1
# daemon code from ASPN
2
2
 
3
3
import os
4
 
import sys
5
4
 
6
5
 
7
6
def daemonize(pidfile, home):
10
9
    background as a daemon.
11
10
    """
12
11
 
13
 
    UMASK = 0
14
12
    WORKDIR = "/"
15
13
    REDIRECT_TO = getattr(os, 'devnull', '/dev/null')
16
14
    MAXFD = 1024
20
18
    except OSError, e:
21
19
        raise Exception("%s [%d]" % (e.strerror, e.errno))
22
20
 
23
 
    if (pid == 0):      # The first child.
 
21
    if pid == 0:      # The first child.
24
22
        os.setsid()
25
23
 
26
24
        try:
27
 
            pid = os.fork()     # Fork a second child.
 
25
            pid = os.fork()     # Fork a second child.
28
26
        except OSError, e:
29
27
            raise Exception, "%s [%d]" % (e.strerror, e.errno)
30
28
 
31
 
        if (pid == 0):  # The second child.
 
29
        if pid == 0:  # The second child.
32
30
            os.chdir(WORKDIR)
33
 
            os.umask(UMASK)
34
31
        else:
35
 
            os._exit(0) # Exit parent (the first child) of the second child.
 
32
            os._exit(0) # Exit parent (the first child) of the second child.
36
33
    else:
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)
 
34
        os._exit(0)     # Exit parent of the first child.
 
35
 
 
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
58
53
 
59
54
    f = open(pidfile, 'w')
60
55
    f.write('%d\n' % (os.getpid(),))
61
56
    f.write('%s\n' % (home,))
62
57
    f.close()
 
58
 
 
59
 
 
60
def is_running(pidfile):
 
61
    try:
 
62
        f = open(pidfile, 'r')
 
63
    except IOError:
 
64
        return False
 
65
    pid = int(f.readline())
 
66
    f.close()
 
67
    try:
 
68
        os.kill(pid, 0)
 
69
    except OSError:
 
70
        # no such process
 
71
        return False
 
72
    return True