是否可以以编程方式找出已打开 Linux 上给定文件描述符引用的对象的进程数?
如果是,如果是文件、管道或其他什么有什么区别吗?
最佳答案
奇怪的是,fuser
程序及其输出已由 POSIX 标准化。您可以使用 popen
调用它并解析其输出。除非用户具有特权,否则列表将不完整,并且这种方法本质上容易出现竞争。
在 Linux 上,您可以读取 /proc/*/fd
目录的内容并检查是否引用了同一文件描述符。 (关于权限和竞争的相同评论适用。)如果您对同一文件描述对象的引用感兴趣(它们不仅共享相同的文件,而且还共享相同的文件偏移量,因为它们是由 dup
/dup2
或 fork
),您必须使用 kcmp
系统调用进一步过滤此内容。
关于文件描述符引用的对象的引用计数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/45022747/