regress.py 文件源码

python
阅读 52 收藏 0 点赞 0 评论 0

项目:rdiff-backup 作者: sol1 项目源码 文件源码
def check_pids(curmir_incs):
    """Check PIDs in curmir markers to make sure rdiff-backup not running"""
    pid_re = re.compile("^PID\s*([0-9]+)", re.I | re.M)
    def extract_pid(curmir_rp):
        """Return process ID from a current mirror marker, if any"""
        match = pid_re.search(curmir_rp.get_data())
        if not match: return None
        else: return int(match.group(1))

    def pid_running(pid):
        """True if we know if process with pid is currently running"""
        try: os.kill(pid, 0)
        except OSError, exc:
            if exc[0] == errno.ESRCH: return 0
            else: log.Log("Warning: unable to check if PID %d still running" % (pid,), 2)
        except AttributeError:
            assert os.name == 'nt'
            import win32api, win32con, pywintypes
            process = None
            try:
                process = win32api.OpenProcess(win32con.PROCESS_ALL_ACCESS, 
                                            0, pid)
            except pywintypes.error, error:
                if error[0] == 87: return 0
                else:
                    msg = "Warning: unable to check if PID %d still running"
                    log.Log(msg % pid, 2)
            if process:
                win32api.CloseHandle(process)
                return 1
            return 0
        return 1

    for curmir_rp in curmir_incs:
        assert Globals.local_connection is curmir_rp.conn
        pid = extract_pid(curmir_rp)
        if pid is not None and pid_running(pid):
            log.Log.FatalError(
"""It appears that a previous rdiff-backup session with process
id %d is still running.  If two different rdiff-backup processes write
the same repository simultaneously, data corruption will probably
result.  To proceed with regress anyway, rerun rdiff-backup with the
--force option.""" % (pid,))
评论列表
文章目录


问题


面经


文章

微信
公众号

扫码关注公众号