Encuentre *dónde* está el ejecutable para un proceso actualmente en ejecución

Encuentre *dónde* está el ejecutable para un proceso actualmente en ejecución

Si tengo 2 ejecutables ( /path/to/gcc/myapp.exe, y /path/to/intel/myapp.exe) donde uno está compilado con un compilador Intel y el otro está compilado con gcc estándar, ejecutar ambos aparecerá topcomo solo myapp. Si ejecuto ambos y tengo procesos ejecutándose como myapp, ¿hay alguna manera de saber qué proceso proviene de qué ejecutable?

Tenemos un montón de aplicaciones instaladas en nuestro clúster y me interesa no solo qué aplicaciones se utilizan más, sino también cuáles.versionesde las aplicaciones se están utilizando. Si veo 500 instancias de Rejecución, me gustaría saber si 100 de ellas son de /path/to/R-3.2.1/intel/Ry las otras 400 son de /path/to/R-3.1.3/gcc/R, etc. ¿Cómo puedo hacer esto?

Respuesta1

Puede hacer esto con el /procsistema de archivos, como se indica en elproc(5)página del manual:

/proc/[pid]/exe

En Linux 2.2 y posteriores, este archivo es un enlace simbólico que contiene la ruta real del comando ejecutado.

Porque es unenlace simbólico, puedes leer elobjetivo(haga un ls -lpara ver el nombre de la ruta).

Por [pid]supuesto, significa un ID de proceso para el ejecutable particular que le interesa, en tiempo de ejecución.

(Es poco probable que tenga un sistema que ejecute un kernel de Linux tan antiguo, por lo que "siempre funciona" debería ser suficiente).

Para obtener un recuento, simplemente necesita un script que recorra /proccada directorio que posee (ya que está ejecutando los programas, puede ver sus /procdatos) y comparar los nombres de ruta con los que le interesan. ElreadlinkEl programa, por ejemplo, es útil en scripts bash (y dado que es parte de coreutils, probablemente lo tengas en un sistema Linux).

Respuesta2

Para hacer eso, puede iniciar topy luego presionar cen su teclado para alternar la vista de ruta completa.

Respuesta3

Si estos procesos se ejecutan con una línea de comando diferente (por ejemplo, usando la ruta completa), puede presionar cpara mostrar/ocultar la línea de comando completa con la que se ejecutó el proceso.

información relacionada