
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á top
como 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 R
ejecución, me gustaría saber si 100 de ellas son de /path/to/R-3.2.1/intel/R
y 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 /proc
sistema 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 -l
para 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 /proc
cada directorio que posee (ya que está ejecutando los programas, puede ver sus /proc
datos) y comparar los nombres de ruta con los que le interesan. Elreadlink
El 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 top
y luego presionar c
en 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 c
para mostrar/ocultar la línea de comando completa con la que se ejecutó el proceso.