我希望能够获得一个进程在运行期间曾经打开的所有文件描述符的列表(现在考虑这个问题与实际文件有关)。轮询/proc/(PID)/fd/的问题是您只能及时获得当前打开内容的快照。有没有办法强制 linux 将此信息保留足够长的时间,以便在整个进程运行期间记录它?
最佳答案
首先,请注意一个被应用程序open
-ed然后close
-d的文件描述符被内核回收( future 的open
可以给出相同的文件描述符)。参见 open(2)和 close(2)并阅读 Advanced Linux Programming .
然后,考虑使用 strace(1) ;您将能够记录所有系统调用(或者可能只是open
、socket
、close
、accept
、 ...那是更改文件描述符表的系统调用)。当然 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/