检查文件是否未打开或未被其他进程使用

检查文件是否未打开或未被其他进程使用,第1张

检查文件是否未打开或未被其他进程使用

试图找出文件是否正在被另一个进程使用的问题是竞争条件的可能性。您可以检查一个文件,确定它未被使用,然后在打开它之前,另一个进程(或线程)会跳入并抓住它(甚至删除它)。

好的,假设您决定忍受这种可能性,并希望不会发生。检查其他进程正在使用的文件取决于 *** 作系统。

在Linux上,这很简单,只需遍历/ proc中的PID。这是一个生成器,用于迭代用于特定PID的文件:

def iterate_fds(pid):    dir = '/proc/'+str(pid)+'/fd'    if not os.access(dir,os.R_OK|os.X_OK): return    for fds in os.listdir(dir):        for fd in fds: full_name = os.path.join(dir, fd) try:     file = os.readlink(full_name)     if file == '/dev/null' or        re.match(r'pipe:[d+]',file) or        re.match(r'socket:[d+]',file):         file = None except OSError as err:     if err.errno == 2:   file = None     else:         raise(err) yield (fd,file)

在Windows上,它不是那么简单,API尚未发布。有一个

handle.exe
可以使用的sysinternals工具(),但我建议使用PyPi模块
psutil
,该模块是可移植的(即,它也可以在Linux上运行,并且可能在其他OS上运行):

import psutilfor proc in psutil.process_iter():    try:        # this returns the list of opened files by the current process        flist = proc.open_files()        if flist: print(proc.pid,proc.name) for nt in flist:     print("t",nt.path)    # This catches a race condition where a process ends    # before we can examine its files        except psutil.NoSuchProcess as err:        print("****",err)


欢迎分享,转载请注明来源:内存溢出

原文地址: http://outofmemory.cn/zaji/5649195.html

(0)
打赏 微信扫一扫 微信扫一扫 支付宝扫一扫 支付宝扫一扫
上一篇 2022-12-16
下一篇 2022-12-16

发表评论

登录后才能评论

评论列表(0条)

保存