13

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

要识别 fd :

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

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

4

5 回答 5

19

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

lsof -p pid

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

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

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

ls /proc/<pid>/fd/* | xargs -L 1 readlink
于 2010-04-21T09:16:55.573 回答
9

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

ls -l /proc/pidoftheproces/fd
于 2010-04-21T09:19:31.860 回答
6
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
于 2010-04-21T09:16:26.710 回答
2

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

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

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

于 2010-04-21T09:04:52.827 回答
1
lsof | grep processName
于 2010-04-21T09:04:30.970 回答