linux - 检索进程曾经在 linux 中打开的所有文件描述符(文件)的列表

标签 linux file file-io process

我希望能够获得一个进程在运行期间曾经打开的所有文件描述符的列表(现在考虑这个问题与实际文件有关)。轮询/proc/(PID)/fd/的问题是您只能及时获得当前打开内容的快照。有没有办法强制 linux 将此信息保留足够长的时间,以便在整个进程运行期间记录它?

最佳答案

首先,请注意一个被应用程序open-ed然后close-d的文件描述符被内核回收( future 的open 可以给出相同的文件描述符)。参见 open(2)close(2)并阅读 Advanced Linux Programming .

然后,考虑使用 strace(1) ;您将能够记录所有系统调用(或者可能只是opensocketcloseaccept、 ...那是更改文件描述符表的系统调用)。当然 strace 使用的是 ptrace(2)系统调用(您可能不想直接使用它)。

最简单的方法是运行 strace -o/tmp/mytrace.tr yourprog argments...使用 less 之类的寻呼机,进入相当大的 /tmp/mytrace.tr 文件。

作为Gearoid Murphy评论说你可以使用例如限制 strace 的输出-e trace=file.

顺便说一句,调试 Makefile-s 这是错误的方法。了解有关 remake 的更多信息.

关于linux - 检索进程曾经在 linux 中打开的所有文件描述符(文件)的列表,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/19099182/

相关文章:

.net - FileStream 和内存使用

linux - 我可以在不重新编译整个内核的情况下将 gcov 用于内核模块吗?

r - 在离线的 Debian 机器上安装最新的 R 版本

c - c中的简单二维数组,段错误(核心转储)

Java - 缓冲区 - 我的代码在读取时跳过文本文件的最后一行

java - FileInputStream 逐字节或 block 读取?

linux - 亚马逊aws在数据传输过程中会花费一些费用吗?

linux - Fedora 24(64 位)Git 安装(perl-devel、ParseXs 安装)

python - 将文件读取到 Python 中的字符串列表

java - 如何利用文件 I/O 来创建信件?