【问题标题】:Identify the files opened a particular process on linux识别在linux上打开特定进程的文件
【发布时间】:2011-02-10 12:14:23
【问题描述】:

我需要一个脚本来识别在 linux 上打开特定进程的文件

识别 fd:

>cd /proc/<PID>/fd; ls |wc –l  

我希望看到一个数字列表,它是进程中使用的文件描述符的编号列表。请告诉我如何查看该过程中使用的所有文件。 谢谢。

【问题讨论】:

    标签: linux process pid


    【解决方案1】:
    lsof | grep processName
    

    【讨论】:

      【解决方案2】:

      您需要lsof。获取打开 foo.txt 的应用程序的 PID:

      lsof | grep foo.txt | awk -F\  '{print $2}'
      

      或 Macmede 所说的相反(列出进程打开的文件)。

      【讨论】:

      • 这将列出使用文件的进程。我认为他想要一个进程使用的文件......所以输入进程名称而不是文件名......
      【解决方案3】:
      lsof -p <pid number here> | wc -l
      

      如果您没有 lsof,您可以使用 /proc 进行大致相同的操作

      例如

      $ pid=1825
      $ ls -1 /proc/$pid/fd/*
      $ awk '!/\[/&&$6{_[$6]++}END{for(i in _)print i}' /proc/$pid/maps
      

      【讨论】:

        【解决方案4】:

        您可能想要使用的命令是lsof。这比在/proc 中挖掘更好,因为该命令是一种更清晰、更稳定的获取系统信息的方式。

        lsof -p pid
        

        但是,如果您对 /proc 的内容感兴趣,您可能会注意到文件 /proc/&lt;pid&gt;/fd/x 是与其关联的文件的符号链接。您可以使用readlink 命令读取符号链接值。例如,这表明终端标准输入绑定到:

        $ readlink /proc/self/fd/0
        /dev/pts/43
        

        或者,要获取某个进程的所有文件,

        ls /proc/<pid>/fd/* | xargs -L 1 readlink
        

        【讨论】:

          【解决方案5】:

          虽然 lsof 很好,但你可以这样做:

          ls -l /proc/pidoftheproces/fd
          

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 2010-09-18
            • 1970-01-01
            • 2012-10-02
            • 1970-01-01
            • 2023-03-26
            • 2013-09-18
            • 1970-01-01
            • 1970-01-01
            相关资源
            最近更新 更多