Esempio n. 1
0
class CheckPIDFileController(DaemonController):
    def __init__(self, pidfile, *args, **kw):
        super(CheckPIDFileController, self).__init__(*args, **kw)
        self.__pidfile = Path(pidfile)

    @property
    def pidfile(self):
        return self.__pidfile

    @property
    def is_running(self):
        if not self.pidfile.exists():
            return False

        if not self.pidfile.isfile():
            raise Exception("pidfile '%s' is not a file" % (self.pidfile,))

        try:
            pid = int(self.__pidfile.open().readline(16))
        except:
            self.logger.exception("Error reading pidfile %s" % (self.pidfile))
            raise

        try:
            os.kill(pid, 0)
            return True
        except OSError, e:
            if e.errno == errno.ESRCH:
                return False
            raise