【问题标题】:Linux: get list of files a program currently has openLinux:获取程序当前打开的文件列表
【发布时间】:2010-08-18 14:46:48
【问题描述】:

在 Linux 中,如何获取程序 X 中当前打开的文件列表?

(具体来说,我在 Fedora 上,程序是 Zend Studio,但我认为有一个通用的答案。)

【问题讨论】:

标签: linux


【解决方案1】:

使用例如lsof(“列出打开的文件”)并过滤输出,或使用-c programX 选项将其限制为由 programX 打开的文件。此表达式可以是通配符。

【讨论】:

  • 我试过lsof | grep somefile,其中somefile 是我知道在Zend Studio 中打开的文件,但它什么也没找到。如果一个文件在 gedit 中打开,同样的事情。也许这些文件在技术上不是“打开”的,除非程序正在主动读取或保存它们,而其余时间它只是在内存中拥有一个副本和对文件存储位置的引用?
【解决方案2】:

您可以在/proc/PID/fd 中找到指向实际文件的符号链接,其中PID 是进程ID。

【讨论】:

  • 嗯。我正在尝试确定进程 ID - 我做了 ps -AF | grep zend 并获得了各种列表(我运行 Zend Server 等),但没有任何东西看起来像工作室。我关闭了 Zend Studio 并再次尝试,列表是一样的。除了“开始杀死它们并查看它何时关闭”之外,关于如何确定 PID 的任何想法?
【解决方案3】:

ls -l /proc/<zend studio's pid>/fd 将打印文件描述符列表。映射到通过open() 打开的文件的那些将是用于打开它们的文件路径的符号链接。

【讨论】:

    【解决方案4】:

    如果您还没有安装程序lsof。获取正在运行的程序的pid。运行lsof -p [pid]

    【讨论】:

      【解决方案5】:
      lsof -p [PID]
      

      或者,一次性获取 PID

      lsof -p `pgrep [PROG_NAME]`
      

      或者,更简单

      lsof -c [PROG_NAME]
      

      【讨论】:

        【解决方案6】:

        你可以使用

        ls /proc/PID/fd | wc -l 
        

        返回由 PID 打开的文件数 或者你可以使用 lsof(打开文件列表)

        lsof -a -p pid
        

        【讨论】:

          猜你喜欢
          • 1970-01-01
          • 1970-01-01
          • 2015-11-10
          • 2016-07-24
          • 2014-08-07
          • 2022-12-30
          • 2014-05-18
          • 1970-01-01
          • 1970-01-01
          相关资源
          最近更新 更多