仅当Linux中的文件未被其他进程使用时才在Linux中移动文件

Jeg*_*sch 2 linux file atomic lsof

使用lsof命令,我可以确定某个进程是否正在使用某个文件,但是我需要自动检查文件以供使用,并且仅在未使用时才移动它.这些文件正由我无法控制的各种其他程序使用,所以我不能使用咨询锁.目的是阻止其他进程修改该文件,因此只需在进程打开时移动该文件就不行了.有解决方案吗

更新:我认为我认为适合我的目的的解决方案.最终目标是在其他程序完成修改后将这些文件处理为最终状态.如果我将文件移动到另一个目录,我可以使用lsof通过其旧路径检查它是否仍在使用中; 如果是这样,我只是稍后再检查,直到它不再使用,然后处理文件.通过将文件移动到另一个目录,它会隐藏用户和程序中的文件.我不希望用户和程序在旧目录中看到该文件,因为这使他们有机会在我使用lsof和处理文件之间打开文件,这意味着我将以修改状态处理文件.

dog*_*ane 5

怎么用fuser?在文件上运行它,它将显示使用该文件的进程的PID.如果没有PID,则没有使用该文件.如果没有使用该文件的进程,它也将返回非零退出代码.

但请注意,您仍然可能遇到竞争条件,因为进程可能会在fuser命令返回之后和之前打开文件mv.

一些示例代码,用于在未使用时移动文件:

if ! fuser /my/file
then
     mv /my/file /somewhere/else
fi 
Run Code Online (Sandbox Code Playgroud)