2010-04-21 43 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 
相關問題