【问题标题】:See what process is using a file in Mac OS X查看 Mac OS X 中哪个进程正在使用文件
【发布时间】:2012-01-09 04:06:51
【问题描述】:

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

【问题讨论】:

标签: macos unix terminal audit lsof


【解决方案1】:

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

我认为你最好的选择是 fernLightning 的fseventer.app。它是“nagware”,可让您实时(以图形方式)观看 fsevents API。

【讨论】:

  • lsof | grep myfilename 为我工作。我的回收站中有一个 PDF 文件,系统声称该文件正在使用中。奇怪的是lsof 声称它正在被Preview 使用,但Preview 似乎没有运行(例如,当我通过正在运行的应用程序进行命令选项卡时)但Activity Monitor 确实显示它正在运行。愚蠢的预览。
  • 这非常适合临时文件(即不保持打开但仅在保存时触摸的文件)。
  • 我今天遇到了类似的问题,我的垃圾箱中的一个文件被僵尸预览进程持有。打开预览并再次退出它为我解决了这个问题。我认为 Preview 会定期保留文件,尽管它已退出。我经常在 Preview 中打开 Evernote 中的图像以对其进行裁剪,而且大多数情况下——通常情况下——即使在我退出 Preview 之后,Evernote 仍会认为该图像仍在另一个应用程序中打开。
  • 这似乎与我现在遇到的问题相似 - 仍然没有解决方案。我使用 Chrome 下载了一个文件,然后使用 Finder 将其移动到另一个文件夹。它显示为灰色,所以我使用 lsof 找出打开文件的人:Finder。我尝试强制退出 Finder(它会自动重新启动它)。那没有用。我试着关闭我的笔记本电脑,认为这会让所有东西都进入睡眠状态,并希望能解决问题。那也没用。 lsof 继续将 Finder 显示为罪魁祸首,并且在 UI 中继续显示为灰色。
  • 有趣的是,关闭查找窗口似乎可以解决问题。但是,如果我打开一个新的查找窗口并导航到同一个文件夹,问题仍然存在。我通过将错误的文件拖到垃圾箱解决了这个问题(产生一个警告,表明打开文件的程序可能会有不良影响),然后重新复制文件。
【解决方案2】:

很简单:sudo fs_usage | grep [path_to_file]

【讨论】:

  • 这是迄今为止最好的答案。
  • fs_usage 应该以 root 身份运行...这不是最好的解决方案。
  • 这显示 fs 事件?如果一个进程打开了一个文件但没有对其进行任何操作,则此处不会显示任何内容。或者至少似乎是我的经验。 sudo fs_usage | grep musiclibrary 只显示 sudo lsof | grep musiclibrary 显示 3 个进程访问我的音乐库数据库文件。
【解决方案3】:

另一个选项是Sloth。这是其他人提到的 LSOF 的免费开源 GUI。

【讨论】:

  • 哇,这是一个非常棒的工具,感谢分享!它非常适合找到我忘记的过程。
  • 我更喜欢命令行解决方案,因为它们更便携,但我必须承认这是一个非常好的工具!感谢您的建议。
  • 这就像类固醇上的 lsof,非常好
【解决方案4】:

更快的方法是:

$ lsof [path_to_file]

此解决方案不需要 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

【讨论】:

    【解决方案5】:

    但我用谷歌搜索了 2 分钟,找到了your answer here

    $ lsof | grep [随便]

    [whatever] 替换为您要查找的文件名。 有了这个,你可以看到哪个程序拼命地抓住你的 即将被丢弃的文件。退出该程序后,您的垃圾箱将 空。

    【讨论】:

    • 问题在于我必须尝试非常快地键入 lsof。这可能只是暂时的
    • lsof -r 将 lsof 置于重复模式
    • 在文件被释放的情况下使用 grep 是有意义的。
    猜你喜欢
    • 1970-01-01
    • 2015-01-31
    • 2011-12-08
    • 2011-07-18
    • 2013-10-31
    • 2015-11-05
    • 2011-12-23
    • 1970-01-01
    • 1970-01-01
    相关资源
    最近更新 更多