我希望能够获得流程在运行时期间打开的所有文件描述符(现在考虑这个问题与实际文件有关)的列表。轮询/ proc /(PID)/ fd /的问题是您只能获得当前打开的快照。有没有办法强制linux保持这些信息足够长的时间来记录整个过程的运行?
答案 0 :(得分:2)
首先,注意应用程序的open
- 然后是close
- d的文件描述符被内核回收(未来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
。
BTW,调试{{1}} - 这是错误的做法。详细了解remake。