获取OS X中的打开文件(描述符)列表

use*_*543 51 macos file-descriptor procfs osx-mavericks

我想在os x(10.9.1)的进程中获取一个打开文件的列表.在Linux中我能够从中获得/proc/PID/fd.但是我不确定如何在OS X上获得相同的结果.我发现OS X上没有procfs(默认情况下.可能的实现存在,但我不想那样).

那么我如何(在本机上)获取OS X上进程中打开文件的列表.一种方法是lsof.有没有其他支持?请告诉我在哪里可以获得更多相关信息.

谢谢.

smi*_*lli 49

我很难获得Activity Monitor来显示以root身份运行的进程的打开文件(通过sudo).最初的问题提到了lsof,它完全可以解决问题.如果你知道进程名称或PID,那就超级快了.

按名称查找流程:

lsof -c processname
Run Code Online (Sandbox Code Playgroud)

通过PID查找流程:

lsof -p 123
Run Code Online (Sandbox Code Playgroud)

(sudo根据需要添加前缀,例如,如果您不是该进程的所有者.)


Fuu*_*Fuu 39

至少在OSX 10.10(Yosemite,没有检查Mavericks)上,您可以通过默认活动监视器应用程序获取打开文件列表.只需双击列表中的相关进程,然后在弹出窗口中选择"打开文件和端口"选项卡.

提示:该窗格上的cmd + f快捷方式允许在内容上进行搜索和突出显示.

  • 它仅适用于您拥有的进程.对于其他所有人,你仍然需要使用`lsof`. (2认同)

Tra*_*rke 7

检查当前进程的干净简单的方法(相当于/proc/self/fdLinux 上的)是使用ls /dev/fd/

例如

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3
Run Code Online (Sandbox Code Playgroud)

  • 有没有办法为当前进程以外的进程访问它? (3认同)

小智 6

这适用于某些事情:

sudo fs_usage | grep dev
Run Code Online (Sandbox Code Playgroud)

用于/dev/文件或类似文件。


Dmi*_*try 5

列出 /Volumes/VolumeName 上的打开文件:

lsof | grep "/Volumes/VolumeName"
Run Code Online (Sandbox Code Playgroud)