簡體   English   中英

獲取 OS X 中打開的文件(描述符)列表

[英]Get list of open files (descriptors) in OS X

我想獲取 os x (10.9.1) 進程中打開文件的列表。 在 Linux 中,我能夠從/proc/PID/fd獲得這個。 但是我不確定如何在 OS X 上獲得相同的結果。我發現 OS X 上不存在 procfs(默認情況下。可能的實現存在,但我不想那樣做)。

那么我如何(本機)獲取 OS X 進程中打開文件的列表。一種方法是lsof 還有其他支持嗎? 請讓我知道在哪里可以獲得更多信息。

謝謝。

我很難讓活動監視器顯示以 root 身份運行的進程的打開文件(通過 sudo)。 最初的問題提到了lsof ,它確實起到了作用。 如果您知道進程名稱或 PID,它會非常快。

按名稱查找進程:

lsof -c processname

按 PID 查找進程:

lsof -p 123

(根據需要使用sudo前綴,例如,如果您不是該進程的所有者。)

至少在 OSX 10.10(Yosemite,沒有檢查 Mavericks)上,您可以通過默認的活動監視器應用程序按進程獲取打開文件的列表。 只需雙擊列表中的相關進程,然后在彈出窗口中選擇“打開文件和端口”選項卡。

提示:該窗格上的 cmd+f 快捷方式允許搜索和突出顯示內容。

這適用於某些事情:

sudo fs_usage | grep dev

對於/dev/文件或類似文件。

檢查當前進程(Linux 上的/proc/self/fd等價物)的簡潔方法是使用ls /dev/fd/

例如

$ touch "file"
$ exec 3<>file

$ ls /dev/fd/    

0 1 2 3

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

lsof | grep "/Volumes/VolumeName"

我使用非常實用的 What's Open 應用程序(帶有過濾器、磁盤選擇等)。

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

既然你問“還有其他支持 [除了 lsof] 可用嗎?”,試試這個:

使用此問題的選定答案中引用的“proc_pidinfo”C API 創建命令行工具: 如何以編程方式獲取 OS X 上給定 PID 的打開文件描述符列表?

您可以使用帶有 PROC_PIDLISTFDS 選項的 proc_pidinfo 來枚舉給定進程使用的文件。 然后,您可以在每個文件上依次使用 proc_pidfdinfo 和 PROC_PIDFDVNODEPATHINFO 選項來獲取其路徑。

“您可以通過默認的活動監視器應用程序按進程獲取打開文件的列表。只需雙擊列表上的相關進程,然后在彈出窗口中選擇“打開文件和端口”選項卡。” 但是“您很難讓 Activity Monitor 顯示以 root(通過 sudo)或其他用戶身份運行的進程的打開文件”。

所以只需通過 sudo 運行Active Monitor ,就是這樣

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

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^@

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM