¿Es posible obtener el nombre de archivo de un proceso usando PID? ps muestra mucha información útil sobre un proceso, pero no una pista sobre la ubicación del archivo ejecutable de un proceso.
13
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
.
; 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.Ejemplo: busca el nombre del comando de proceso asociado para
PID 45109
...fuente
prueba ps aux
fuente
ps -ef con grep funciona para mí. Para un nombre de archivo específico, simplemente canalice grep así:
(Ese último 'grep -v grep' simplemente evita que obtenga su propio comando grep en la salida)
fuente
ps -p <pid> -Ocomando
fuente