我想知道进程是否正在使用一个确定文件,即该进程是否以只读模式打开文件。
我考虑过搜索/ proc / [pid] / [fd]目录,但这样我浪费了很多时间,而且我觉得这样做并不漂亮。
有没有办法使用某些Linux API来确定X文件是否被任何进程打开?或者也许某些结构数据如/ proc但是文件?
答案 0 :(得分:3)
不是我知道的。 lsof
和fuser
工具完全符合您的建议,可以浏览/proc/*/fd
。
请注意,如果文件在打开后被删除,则打开的文件可能没有名称,并且文件可以在没有进程保存文件描述符的情况下打开(通过mmap
),甚至两者的组合(这将是一个在进程退出时自动清理的进程专用交换文件)。
答案 1 :(得分:2)
确定进程是否正在使用文件很容易。反差越小。原因是内核不直接跟踪逆。保留的信息是:
这就是为什么lsof
的/ proc步行是必要的原因。特定进程使用的文件描述符保存在/ proj / $ PID(以及其他内容)中,因此lsof可以使用此(以及其他内容)来吐出所有pid< - > fd< - > inode关系。
This is a nice article on lsof
。与任何Linux util一样,您可以随时查看其源代码以获取所有详细信息:)
答案 2 :(得分:1)
lsof
可能是您要搜索的工具。
编辑:我没有意识到你是专门搜索要在你的应用程序中集成的东西,所以我的答案看起来有点简单。但无论如何,我认为this question与你的关系非常相关。