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

时间:2014-01-07 14:40:30

标签: macos osx-mavericks file-descriptor procfs

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

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

感谢。

9 个答案:

答案 0 :(得分:42)

我很难让Activity Monitor显示以root身份运行的进程的打开文件(通过sudo)。最初的问题提到了lsof,它确切地解决了这个问题。如果你知道进程名称或PID,那就非常快。

按名称查找流程:

lsof -c processname

按PID查找流程:

lsof -p 123

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

答案 1 :(得分:36)

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

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

答案 2 :(得分:4)

这适用于某些事情:

sudo fs_usage | grep dev

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

答案 3 :(得分:4)

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

例如

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3

答案 4 :(得分:2)

我使用的是What's Open应用程序非常方便(使用过滤器,磁盘选择......)。

你可以在那里找到它:http://whatsopen.en.softonic.com/mac

答案 5 :(得分:1)

既然你问过&#34;有没有其他支持[比lsof]可用?&#34;,试试这个:

使用&#34; proc_pidinfo&#34;创建命令行工具。在此问题的选定答案中引用的C API:How can I programmatically get the list of open file descriptors for a given PID on OS X?

  

您可以将proc_pidinfo与PROC_PIDLISTFDS选项一起使用,以枚举给定进程使用的文件。然后,您可以使用PROC_PIDFDVNODEPATHINFO选项依次对每个文件使用proc_pidfdinfo来获取其路径。

答案 6 :(得分:1)

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

lsof | grep "/Volumes/VolumeName"

答案 7 :(得分:0)

“您可以通过默认的活动监视器应用程序按进程获取打开文件的列表。只需双击列表上的相关进程,然后在弹出窗口中选择“打开文件和端口”标签。 但是,“您很难让Activity Monitor来显示以root用户(通过sudo)或其他用户身份运行的进程的打开文件”。

所以只需通过sudo运行Active Monitor,就可以了

sudo /Applications/Utilities/Activity\ Monitor.app/Contents/MacOS/Activity\ Monitor

答案 8 :(得分:0)

lsof -c /^74016$/ -d^txt -FcfadDtns0

-F 指示 lsof 生成适合其他进程(例如 Perl 或 awk)使用的输出。在 man lsof 中搜索 OUTPUT FOR OTHER PROGRAMS 了解详情。 -F 后面的字符表示您要选择用于输出的字段。然后输出将这些字符中的每一个放在相应字段的前面。示例输出:

p212^@cloginwindow^@
fcwd^@a ^@tDIR^@D0x1000004^@s704^@n/^@
f0^@ar^@tCHR^@D0xf218cacb^@n/dev/null^@
f1^@au^@tCHR^@D0xf218cacb^@n/dev/null^@
f2^@au^@tCHR^@D0xf218cacb^@n/dev/null^@
f3^@ar^@tREG^@D0x1000004^@s216424^@n/Library/Application Support/CrashReporter/SubmitDiagInfo.domains^@
f4^@ar^@tREG^@D0x1000004^@s77^@n/private/etc/security/audit_user^@
f5^@ar^@tREG^@D0x1000004^@s652^@n/private/etc/security/audit_class^@
f6^@ar^@tREG^@D0x1000004^@s358^@n/private/etc/security/audit_control^@
f7^@ar^@tREG^@D0x1000004^@s111033^@n/System/Library/Frameworks/CoreImage.framework/Versions/A/Resources/ci_stdlib.metallib^@
f8^@au^@tIPv4^@d0xc401abd77f1dd1d9^@n*:*^@
f9^@ar^@tREG^@D0x1000004^@s308316^@n/System/Library/Frameworks/CoreImage.framework/Versions/A/Resources/ci_filters.metallib^@
f10^@au^@tREG^@D0x1000004^@s1536^@n/private/var/folders/4g/3lkhwv6n7_76_1s8snscvhxc0000gp/C/com.apple.loginwindow/com.apple.metal/3902/libraries.maps^@
f11^@au^@tREG^@D0x1000004^@s65536^@n/private/var/folders/4g/3lkhwv6n7_76_1s8snscvhxc0000gp/C/com.apple.loginwindow/com.apple.metal/3902/libraries.data^@
f12^@au^@tREG^@D0x1000004^@s1536^@n/private/var/folders/4g/3lkhwv6n7_76_1s8snscvhxc0000gp/C/com.apple.loginwindow/com.apple.metal/Intel(R) HD Graphics 630/functions.maps^@
f13^@au^@tREG^@D0x1000004^@s131072^@n/private/var/folders/4g/3lkhwv6n7_76_1s8snscvhxc0000gp/C/com.apple.loginwindow/com.apple.metal/Intel(R) HD Graphics 630/functions.data^@
p421^@ccoreauthd^@
fcwd^@a ^@tDIR^@D0x1000004^@s704^@n/^@
f0^@ar^@tCHR^@D0xf218cacb^@n/dev/null^@
f1^@au^@tCHR^@D0xf218cacb^@n/dev/null^@
f2^@au^@tCHR^@D0xf218cacb^@n/dev/null^@
p537^@cUserEventAgent^@
fcwd^@a ^@tDIR^@D0x1000004^@s704^@n/^@
f0^@ar^@tCHR^@D0xf218cacb^@n/dev/null^@
f1^@au^@tCHR^@D0xf218cacb^@n/dev/null^@
f2^@au^@tCHR^@D0xf218cacb^@n/dev/null^@
f3^@au^@tunix^@d0xc401abd77b9c8579^@n->0xc401abd77b9c8709^@
f4^@au^@tunix^@d0xc401abd77b9c7129^@n->0xc401abd77b9c8899^@