Answers:
获取进程的二进制位置的一种方法是在第一个段中使用lsof
和。例如,在外壳程序中查看外壳程序是什么二进制文件,请使用外壳程序的PID代替。grep
txt
$$
$ 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
。
如果该过程是使用绝对路径或相对路径启动的,则此技术有效。例如,进入一个外壳并运行
$ sleep 1234567
ps
在另一个外壳中使用仅显示了它是如何启动的:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
使用lsof
显示它运行的二进制文件:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
我安装了MacPorts coreutils + with_default_names,这说明我gsleep
没有接手/bin/sleep
。
示例:您在为PID 45109
...添加关联进程命令名称后
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -p <pid> -O命令
L1A1:~ a1155344$ ps -p1 -Ocommand
PID TT STAT TIME COMMAND
1 ?? Ss 0:02.26 /sbin/launchd
; exit
在print语句之后添加了代码,这样txt
即使bash示例中有多个条目,也只会打印第一个条目。