【发布时间】:2017-07-10 22:42:30
【问题描述】:
是否有可能以编程方式找出已打开 linux 上给定文件描述符引用的对象的进程数?
如果是,如果是文件、管道或其他有什么区别吗?
【问题讨论】:
-
AFAIK,没有标准的方法可以做到这一点。毫无疑问,您可以在
/dev/kmem中寻找答案;尽管不太可能,但您可以通过/proc文件系统找到它。文件的类型不应该有任何区别。您可能会注意到只有一个进程可以打开给定的文件描述符。然后它可以制作它自己的副本(dup2()等),或者它可以使用它的副本创建新进程(fork()等)。单个文件可能有多个跨多个进程的打开文件描述,以及多个进程共享一个打开文件描述。 -
你是在问有多少进程正在打开文件? AFAIK 文件描述符对于进程是唯一的。
-
@ed 是的,我的意思是打开文件、管道或其他东西的进程数。
-
我想不出在 Linux 下这样做的方法——但我可能错了。用例是什么?
-
lsof能够枚举所有进程中的所有打开文件。 Lsof 通过检查 /proc 文件系统来做到这一点。 lsof 在检查内核数据结构时支持多种方言,以支持不同的操作系统,如 Linux 或 FreeBsd。