0

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

4

1 回答 1

3

open首先,请注意,由应用程序-ed 然后-d 的文件描述符close被内核回收(未来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使用 eg的输出-e trace=file

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

于 2013-09-30T17:26:33.137 回答