找出什么线程打开fd

时间:2017-11-17 12:52:39

标签: c++ c linux file-descriptor

我一直在寻找Linux上的解决方案,以找出首先获得fd但现在没有运气的线程。

/proc/pid/task/ 

显示每个线程可用的fd,这是有意义的,因为描述符在整个进程空间中都可用。

lsof

对于这个用例来说当然没什么帮助。

该程序非常复杂,strace或gdb也没有帮助,使用了大量的闭源库。文件路径已知,但没有帮助,因为我无法访问库中的代码。我怀疑fd泄漏是由于某些竞争条件很少发生而且我需要跟踪打开文件的线程。

一个容易实现的解决方案是我在内核文件打开处理程序或c库中添加日志,但是出于好的理由我无法改变内核和内核也没有标准库。

一些建议?

1 个答案:

答案 0 :(得分:3)

如果您有可用的内核符号,请使用SystemTap:

sudo stap -e 'probe syscall.open.return { \ printf("tid=%d, fd=%d\n", tid(), $return) }'