69

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

那么我如何(本机)获取 OS X 进程中打开文件的列表。一种方法是lsof. 还有其他支持吗?请让我知道在哪里可以获得更多信息。

谢谢。

4

9 回答 9

77

我很难让活动监视器显示以 root 身份运行的进程的打开文件(通过 sudo)。最初的问题提到lsof了,它确实起到了作用。如果您知道进程名称或 PID,它会非常快。

按名称查找进程:

lsof -c processname

按 PID 查找进程:

lsof -p 123

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

于 2016-08-02T23:45:32.613 回答
56

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

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

于 2014-11-11T10:45:27.417 回答
10

这适用于某些事情:

sudo fs_usage | grep dev

对于/dev/文件或类似的。

于 2015-12-05T04:44:47.700 回答
8

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

例如

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3
于 2017-02-27T10:14:06.437 回答
5

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

lsof | grep "/Volumes/VolumeName"
于 2018-05-23T07:43:51.467 回答
3

Since you asked "Is there any other support [than lsof] available?", try this:

Create a command line tool using the "proc_pidinfo" C API referenced in the selected answer to this question: How can I programmatically get the list of open file descriptors for a given PID on OS X?

You can use proc_pidinfo with the PROC_PIDLISTFDS option to enumerate the files used by a given process. You can then use proc_pidfdinfo on each file in turn with the PROC_PIDFDVNODEPATHINFO option to get its path.

于 2017-10-07T15:36:32.923 回答
2

我使用非常实用的 What's Open 应用程序(带有过滤器、磁盘选择等)。

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

于 2014-01-08T16:36:54.343 回答
0

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

所以只需Active Monitor通过 sudo 运行,就是这样

sudo /Applications/Utilities/Activity\ Monitor.app/Contents/MacOS/Activity\ Monitor
于 2020-07-20T16:53:43.120 回答
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^@
于 2021-03-11T13:46:25.957 回答