查看在Mac OS X中使用文件的进程

JPC*_*JPC 88 unix macos terminal audit lsof

我希望能够跟踪文件,看看哪个进程正在触摸该文件.那可能吗?我知道我可以在活动监视器中看到打开进程的列表,但我认为很快就能让我看到它.原因是我正在使用框架,我认为正在使用框架的系统版本而不是调试版本,我想看看哪个进程正在触及它.

小智 86

lsof 将列出打开的文件,但对于瞬间触摸可能有点尴尬(例如,如果文件在lsof运行时未打开,则不会显示).

我认为你最好的选择是fernLightning的fseventer.app.它是"nagware",允许您实时(以图形方式)观看fsevents API.

  • `lsof | grep myfilename`为我工作.我的垃圾箱中有一个PDF文件,系统声称正在使用该文件.很奇怪`lsof`声称它正在被'Preview`使用,但`Preview`似乎没有运行(例如,当我通过运行的应用程序命令选项卡时),但`Activity Monitor`确实显示它正在运行.愚蠢的预览. (37认同)

小智 86

这很简单: sudo fs_usage | grep [path_to_file]

  • 这是迄今为止最好的答案. (9认同)
  • 这显示fs事件?如果进程打开了一个文件但没有对其执行任何操作,则此处不会显示任何内容。或者至少看起来是我的经历。`sudo fs_usage | grep musiclibrary`只显示了`sudo lsof | grep musiclibrary` 显示有 3 个进程访问我的 musiclibrary 数据库文件。 (2认同)

Mic*_*ann 39

但我花了2分钟谷歌搜索,并在这里找到你的答案.

$ lsof | grep [无论]

用你正在寻找的文件名替换[whatever].有了这个,你可以看到哪个程序正在拼命抓住你即将被删除的文件.退出该程序后,您的垃圾箱将会清空.

  • lsof -r将lsof置于重复模式 (13认同)

cav*_*ade 14

另一种选择是懒惰.它是其他人提到的LSOF的免费开源GUI.

  • 我倾向于命令行解决方案,因为它们更可移植,但是我必须承认这是一个非常好的工具!谢谢你的建议。 (2认同)

bon*_*oJR 13

更快的方法是:

$ lsof [path_to_file]
Run Code Online (Sandbox Code Playgroud)

此解决方案不需要root密码,并返回以下清除结果:

COMMAND    PID USER   FD   TYPE DEVICE SIZE/OFF     NODE NAME
Finder     497  JR7   21r   REG    1,2   246223 33241712 image.jpg
QuickLook 1007  JR7  txt    REG    1,2   246223 33241712 image.jpg
Run Code Online (Sandbox Code Playgroud)