Respuestas:
Una forma de obtener la ubicación binaria del proceso es usar lsof
y grep
para el primer txt
segmento. 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 ps
en 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 lsof
muestra 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í gsleep
y 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)
; exit
después de la declaración de impresión para que solo se imprima la primeratxt
entrada, incluso si hay varias como en el ejemplo bash.