【发布时间】:2014-02-26 23:23:03
【问题描述】:
我需要一个程序来列出 Linux 中某个进程访问/打开的所有文件。 它应该像这样工作,
o/p:进程正在访问的文件的完整路径。
不想使用“lsof”实用程序或任何其他实用程序。
有没有办法以编程方式实现这一点?
【问题讨论】:
标签: linux unix process filesystems system
我需要一个程序来列出 Linux 中某个进程访问/打开的所有文件。 它应该像这样工作,
o/p:进程正在访问的文件的完整路径。
不想使用“lsof”实用程序或任何其他实用程序。
有没有办法以编程方式实现这一点?
【问题讨论】:
标签: linux unix process filesystems system
如果您只想要 pid 1234 的进程通过 打开 文件描述符可访问的文件,请列出 /proc/1234/fd/ 目录(大多数条目是符号链接)。您还可以通过/proc/1234/fdinfo/获得更多详细信息
试试
ls -l /proc/self/fd/
了解这些文件包含的内容。
以编程方式,您可以在这些目录上的opendir(3) 之后使用readdir(3)(也可以使用readlink(2),至少对于/proc/1234/fd/ 中的条目......)。另见proc(5)
请注意,/proc/ 是特定于 Linux 的。其他一些 Unix 也有它(例如 Solaris),具有非常不同的内容、属性、语义。
如果您还关心过去通过某个进程打开和关闭的文件,那就更难了。另见inotify(7) 和ptrace(2)...
要将文件路径转换为“规范”绝对文件路径,请使用realpath(3)。
【讨论】: