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