使用 lsof 命令,我可以确定某个文件是否正在被某个进程使用,但我需要自动检查文件是否正在使用,只有在未使用时才移动它。这些文件正被我无法控制的各种其他程序使用,因此我无法使用建议锁。目的是阻止其他进程修改该文件,因此仅在进程打开文件时移动文件是不行的。有什么解决办法吗?
更新:我刚刚想到一个我认为适合我的目的的解决方案。最终目标是在其他程序完成修改这些文件时,以它们的最终状态处理这些文件。如果我将文件移动到另一个目录,然后我可以使用 lsof 检查它是否仍在通过其旧路径使用;如果是这样,我只是稍后再检查,直到它不再被使用,然后处理该文件。通过将文件移动到另一个目录,它向用户和程序隐藏了该文件。我不希望用户和程序看到旧目录中的文件,因为这让他们有机会在我使用 lsof 和处理文件之间打开文件,这意味着我将在修改后的状态下处理文件。
最佳答案
使用 fuser
怎么样?在文件上运行它,它将显示使用该文件的进程的 PID。如果没有 PID,则没有任何东西使用该文件。如果没有进程使用该文件,它还将返回一个非零退出代码。
但是,请注意,您仍然可能会遇到竞争条件,因为进程可能会在 fuser
命令返回之后和您 mv
它之前打开文件。
一些在不使用时移动文件的示例代码:
if ! fuser /my/file
then
mv /my/file /somewhere/else
fi
关于linux - 仅当文件未被其他进程使用时才在 Linux 中移动文件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8746784/