【问题标题】:How to monitor which processes access a particular file in Unix?如何监控哪些进程访问 Unix 中的特定文件?
【发布时间】:2011-04-09 18:38:39
【问题描述】:

我有一个文件,很多进程(和进程线程)正在访问它。

我想监视该文件以获取所有进程试图访问该文件的列表。能够记录时间戳也非常适合用于记录目的,尽管我可以不用它。

  • 是否有任何 Unix 实用程序可以做类似的事情?

  • 如果不存在这样的实用程序,我应该如何使用脚本(shell、Perl)或程序(C、C++)对其进行编程?

【问题讨论】:

  • 可能没有通用的 Unix 方法可以做到这一点。例如 Linux 有 inotify (参见 Carlos 的回答),但 inotify 只存在于 Linux 中。其他种类的 Unix 有不同的方法。

标签: c++ c perl unix shell


【解决方案1】:

在 Linux 下,inotify 可能就是您要查找的内容。

【讨论】:

  • 我支持这个! inotify 还允许您添加在特定时间运行的钩子:当文件被访问、写入、附加等时;我前段时间用它来自动git提交修改或删除目录中的文件
【解决方案2】:

我认为您正在寻找的基本功能在 UNIX 命令fuser 中。

这将告诉您哪些进程正在使用文件(或端口,如果您愿意)。

【讨论】:

  • 虽然不可否认它不会生成基于时间的报告 - 但应该很容易在此基础上创建您需要的内容
【解决方案3】:

FAM - 文件更改监视器http://oss.sgi.com/projects/fam/ 要么 加明http://people.gnome.org/~veillard/gamin/

可能会帮助你(gamin 似乎保持不变,而我不能对 FAM 说同样的话)。

您可以将您的应用附加到 FAM/Gamin,然后您会在观看的文件发生问题时收到通知。 详情我建议:http://techpubs.sgi.com/library/tpl/cgi-bin/getdoc.cgi?coll=0650&db=bks&fname=/SGI_Developer/books/IIDsktp_IG/sgi_html/ch08.html

【讨论】:

    【解决方案4】:

    你可能想看看lsof

    【讨论】:

    • 当我运行lsof 时,某个程序可能已经打开并关闭了它。在这种情况下,它不会注册到lsof。我需要一种方法来持续监视文件,以便每当它被某个进程访问时,触发器都会记录对日志文件的访问。
    猜你喜欢
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多