Si veo un proceso que se ejecuta con ps, ¿cómo puedo encontrar el ejecutable?

11

Si puedo ver un proceso que se ejecuta con ps -e, ¿cómo puedo encontrar el archivo que lo lanzó?

interestar
fuente
2
¿Qué sistema operativo es este? Linux, BSD, Solaris ...
Patrick
Linux ... pero las soluciones cross-unix son bienvenidas.
interstar

Respuestas:

15

En Linux: si conoce el PID, puede capturar el archivo cmdline para ese archivo. P.ej:

cat /proc/PID/cmdline

Esto probablemente fallará si el binario se movió después de que se inició el programa.

Y por supuesto:

lsof -n | grep PID | grep ' txt '

y:

ls -la /proc/PID/exe

que es un enlace simbólico al ejecutable.

Folkert van Heusden
fuente
1
Tenga en cuenta que /proc/PID/cmdlineno tiene un carácter de nueva línea, por lo que probablemente desee hacer algo como cat /proc/PID/cmdline ; echo ''.
Keith Thompson, el
En realidad, tiene caracteres NUL que separan los argumentos, por lo que es posible que desee algo aún más elaborado comotr '\0' ' ' < /proc/PID/cmdline ; echo ''
Keith Thompson,
2

Copie la identificación del proceso del ps -ecomando y luego ejecute lo siguiente:

ps x | grep <process-id>
Aditya Patawari
fuente
¿No fallará eso si una aplicación edita argv [0]? iirc sendmail hace eso.
Folkert van Heusden
Sí, es una probabilidad. Sin embargo, esto es útil casi siempre.
Aditya Patawari
0

Ninguno de los métodos ( ls, lsofo cat) en las otras respuestas funciona para mí. Si lo hago:

$ nano test.txt

Este es mi ganador:

$ pgrep -f -l test
3074 nano test.txt

O, para obtener solo el PID para usarlo en la programación:

$ pgrep -f test
3074

Probado en Kali Linux v1.0.6 (basado en Debian).
En comparación con una simple ls, debo admitir que no es una solución tan portátil, pero al menos funciona.

Sopalajo de Arrierez
fuente