如何监控访问特定文件的进程?

7
我知道有一个fuser命令可以列出进程的pid,但是如何持续监控哪个进程访问了文件呢?(类似于tail -f filename的行为)
假设有一个进程写入文件并在一定时间间隔后释放句柄,因此很难使用fuser捕获该进程。

请查看http://linux.die.net/man/7/inotify。 - Jayan
你需要/可以承担多少侵入性和交互性?如果你提到的间隔足够长,@cravoori的轮询可能可行;用命名管道替换文件并饱和其缓冲区将阻止所有写入者,因此您可以悠闲地识别它们,但可能不是您要寻找的解决方案;最后,您可以定义自己的Linux内核跟踪点来跟踪哪个进程打开了特定文件以进行写入。 - vladr
2个回答

1

您可以观察定期执行命令。Watch还支持差异标志,以便在连续运行中突出显示差异。

watch -n 5  'fuser file_name'

对我来说并没有真正起作用...文件写入非常简短,使用监视器也捕捉不到它(甚至尝试了watch -n 1)。 - the1plummie

0
你可以使用inotifywatch,假设你在Linux上。
此命令将打印文件的所有访问和修改操作,持续60秒,然后输出统计信息。
inotifywatch -v -e access -e modify -t 60 filename

你可以从https://github.com/rvoicilas/inotify-tools/wiki获取inotifywatch的源代码。


3
可以显示文件被访问/修改的次数,但是否有办法找出哪个进程访问/修改了该文件? - aioobe

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接