2010-04-21 75 views
12

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

一个特定的程序,以确定FD:

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

我希望看到号码列表,其是过程中使用的文件描述符编号的列表。请告诉我如何查看在该过程中使用的所有文件。 谢谢。

回答

2

您需要lsof。为了让开幕foo.txt的应用程序的PID:

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

还是什么Macmede说做相反的(由一个进程打开的列表文件)。

+0

哦 谢谢!让我试试 – aladine 2010-04-21 09:07:56

+0

这将使用文件列出进程。我想他想要一个进程使用的文件...所以输入进程名称而不是文件名... – Macmade 2010-04-21 09:11:25

+0

正确,我更新了答案。 – 2010-04-21 09:14:53

5
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 
17

你可能想使用的命令是lsof。这比在/proc中挖掘更好,因为该命令是获取系统信息的更明确和更稳定的方式。

lsof -p pid 

不过,如果你有兴趣/proc东西,你可能会注意到,文件/proc/<pid>/fd/x是一个符号链接它与相关的文件。您可以使用readlink命令读取符号链接值。例如,这说明终端标准输入势必:

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

,或者得到一些过程中的所有文件,

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

虽然lsof的是好的,你可以这样做:

ls -l /proc/pidoftheproces/fd 
相关问题