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ó?


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.


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>

¿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.

Al usar nuestro sitio, usted reconoce que ha leído y comprende nuestra Política de Cookies y Política de Privacidad.
Licensed under cc by-sa 3.0 with attribution required.