如何以编程方式获取OS X上给定PID的打开文件描述符列表?

问题描述:

我见过的所有东西都说使用lsof -p,但我正在寻找一些不需要fork/exec的东西。如何以编程方式获取OS X上给定PID的打开文件描述符列表?

例如在Linux上,可以简单地走/proc/{pid}/fd

+1

你有没有签出[lsof源代码](http://people.freebsd.org/~abe/)? – Sebivor 2013-03-23 05:49:30

+0

我挖了15分钟左右,但我对C很糟糕,无法理解它。我会一直捅它,如果我想出了一些东西,我会把它作为自己的答案:) – fmoo 2013-03-23 05:55:11

你可以use proc_pidinfoPROC_PIDLISTFDS选项来枚举给定进程使用的文件。然后您可以在每个文件上依次使用proc_pidfdinfoPROC_PIDFDVNODEPATHINFO选项来获取其路径。

+0

这个API有没有好的人页面或其他文档?我一直在用/ usr/include来查看你提供的例子,但它非常简洁。 – fmoo 2013-03-23 07:06:19

+0

没有任何我知道的文档。在解释系统调用提供的信息方面,sys/proc_info.h似乎相当明显,如果你想了解更多关于它是如何工作的,可以在内核开源中使用系统调用的实现。 – bdash 2013-03-23 07:15:07