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