Respuestas:
Una forma de obtener la ubicación binaria del proceso es usar lsofy greppara el primer txtsegmento. Por ejemplo, en el shell para ver qué binario es el shell, use el PID del shell en lugar de $$.
$ 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
Puedes ver que el shell está usando /bin/bash.
Esta técnica funciona si el proceso se inició utilizando una ruta absoluta o relativa. Por ejemplo, entrar en un shell y ejecutar
$ sleep 1234567
y usar psen otro shell solo muestra cómo se lanzó:
$ ps auxww|grep '[s]leep'
blair 79462 0.0 0.0 600908 744 s011 S+ 11:17PM 0:00.00 sleep 1234567
usando lsofmuestra qué binario se ejecutó:
$ lsof -p 79462 | awk '$4 == "txt" { print $9 }'
/opt/local-development/bin/gsleep
Tengo MacPorts coreutils + with_default_names instalado, lo que explica que recogí gsleepy no /bin/sleep.
Ejemplo: busca el nombre del comando de proceso asociado para PID 45109...
> % ps awx | awk '$1 == 45109 { print $5 }'
> /Applications/Safari.app/Contents/MacOS/Safari
ps -ef con grep funciona para mí. Para un nombre de archivo específico, simplemente canalice grep así:
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
(Ese último 'grep -v grep' simplemente evita que obtenga su propio comando grep en la salida)
; exitdespués de la declaración de impresión para que solo se imprima la primeratxtentrada, incluso si hay varias como en el ejemplo bash.