grigoryvp Asked: 2009-05-28 22:01:34 +0800 CST2009-05-28 22:01:34 +0800 CST 2009-05-28 22:01:34 +0800 CST 如何在 MacOS 中从 PID 获取进程文件名? 772 是否可以使用 PID 获取进程的文件名?ps 显示有关进程的许多有用信息,但不显示有关进程可执行文件位置的提示。 mac-osx process pid 5 个回答 Voted Best Answer Blair Zajac 2009-05-28T22:13:53+08:002009-05-28T22:13:53+08:00 获取进程二进制位置的一种方法是使用lsofandgrep用于txt第一段。例如,在 shell 中查看 shell 是什么二进制文件,使用 shell 的 PID 代替$$. $ lsof -p $$ | grep txt bash 78228 blair txt REG 14,2 1244928 6568359 /bin/bash bash 78228 blair txt REG 14,2 1059792 23699809 /usr/lib/dyld bash 78228 blair txt REG 14,2 136368128 81751398 /private/var/db/dyld/dyld_shared_cache_i386 您可以看到 shell 正在使用/bin/bash. 如果使用绝对或相对路径启动进程,则此技术有效。例如,进入一个 shell 并运行 $ sleep 1234567 在另一个 shell 中使用ps仅显示它是如何启动的: $ ps auxww|grep '[s]leep' blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567 usinglsof显示它运行的是哪个二进制文件: $ lsof -p 79462 | awk '$4 == "txt" { print $9 }' /opt/local-development/bin/gsleep 我安装了 MacPorts coreutils +with_default_names,这说明我选择了gsleep而不是/bin/sleep. HappySpaceInvader 2009-05-28T23:27:54+08:002009-05-28T23:27:54+08:00 ps -ef 和 grep 对我有用。对于特定的文件名,只需通过 grep 管道即可: MacBook:~ Me$ ps -ef | grep Safari | grep -v grep 501 15733 301 0 0:25.76 ?? 1:58.24 /Applications/Safari.app/Contents/MacOS/Safari -psn_0_4977855 (最后的 'grep -v grep' 只会阻止你在输出中获得自己的 grep 命令) Xerxes 2009-05-28T22:13:44+08:002009-05-28T22:13:44+08:00 示例:您在PID 45109...的关联进程命令名称之后 > % ps awx | awk '$1 == 45109 { print $5 }' > /Applications/Safari.app/Contents/MacOS/Safari Jason Tan 2009-05-30T08:30:04+08:002009-05-30T08:30:04+08:00 ps -p <pid> -Ocommand L1A1:~ a1155344$ ps -p1 -Ocommand PID TT STAT TIME COMMAND 1 ?? Ss 0:02.26 /sbin/launchd vu1tur 2009-05-28T22:13:29+08:002009-05-28T22:13:29+08:00 试试ps辅助
获取进程二进制位置的一种方法是使用
lsof
andgrep
用于txt
第一段。例如,在 shell 中查看 shell 是什么二进制文件,使用 shell 的 PID 代替$$
.您可以看到 shell 正在使用
/bin/bash
.如果使用绝对或相对路径启动进程,则此技术有效。例如,进入一个 shell 并运行
在另一个 shell 中使用
ps
仅显示它是如何启动的:using
lsof
显示它运行的是哪个二进制文件:我安装了 MacPorts coreutils +with_default_names,这说明我选择了
gsleep
而不是/bin/sleep
.ps -ef 和 grep 对我有用。对于特定的文件名,只需通过 grep 管道即可:
(最后的 'grep -v grep' 只会阻止你在输出中获得自己的 grep 命令)
示例:您在
PID 45109
...的关联进程命令名称之后ps -p <pid> -Ocommand
试试ps辅助