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

时间:2013-09-30 16:27:19

标签: linux file file-io process

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

1 个答案:

答案 0 :(得分:2)

首先,注意应用程序的open - 然后是close - d的文件描述符被内核回收(未来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

BTW,调试{{1}} - 这是错误的做法。详细了解remake