¿Es posible encontrar la ruta de un programa en ejecución?


17

Tengo un xmms2dproceso en ejecución, pero dos posibles archivos ejecutables (en diferentes directorios, ambos en la ruta ejecutable) que podrían haberlo generado. Sospecho que uno de ellos está dañado, porque a veces este programa funciona y otras no. El proceso en ejecución ahora funciona, así que quiero eliminar (o renombrar) el otro.

ps ax|grep "xmms"vuelve 8505 ? SLl 2:38 xmms2d -vsin información de ruta. Dado el PID, ¿podría averiguar si se ejecutó desde /usr/bin/xmms2do /usr/local/bin/xmms2d?

¡Gracias!


2
ps -C xmmsdebería hacer que tu grep sea obsoleto.
usuario desconocido

1
pgrep también lo haría.
jlliagre

Respuestas:


22

Prueba esto:

ls -l /proc/8505/exe

O si no desea analizar la salida de ls, simplemente haga:

readlink /proc/8505/exe

o

realpath /proc/8505/exe

6

Si está ejecutando Solaris, la forma es ligeramente diferente de la sugerida por Linux:

$ for i in $(pgrep bash)
do
  printf "%6d %s\n" $i $(readlink /proc/$i/path/a.out)
done
   577 /usr/bin/bash
 11247 /usr/bin/bash
 13921 /usr/bin/bash
 13992 /tmp/bash

Si desea conocer el directorio de trabajo actual de los procesos en ejecución, puede usar:

pwdx $(pgrep xmms)

p.ej:

$ pwdx $(pgrep ksh)
2904: /home/jlliagre
2906: /home/jlliagre
3844: /tmp

(eliminé mi comentario porque ya no se aplicaba después de su edición :)
Kjetil Jorgensen

-1

Comienzo el mousepad desde el shell:

mousepad & 
[1] 24289

mira, de donde viene:

which mousepad 
   /usr/bin/mousepad

Comience con la ruta:

/usr/bin/mousepad &

mira a través de ps:

ps v -C mousepad 
  PID TTY      STAT   TIME  MAJFL   TRS   DRS   RSS %MEM COMMAND
24289 pts/3    S      0:00      3    62 85441 10964  1.0 mousepad
24292 pts/3    S      0:00      0    62 85433 10864  1.0 /usr/bin/mousepad

Como vemos, el que se invoca sin ruta se muestra sin ruta, y comienza con la RUTA, y por lo tanto se encuentra por

which mousepad

Tan simple como eso, ¿no? ¡Espere! ¿Qué pasa si inicio mousepad desde el menú? Bueno, podría especificarse con o sin usar la configuración de RUTA. Lo intenté. Un inicio normal conduce a un simple 'mousepad' en ps v -C. Como ~ / bin es la primera parte de mi RUTA, creo un muñeco allí y, voila, el muñeco se inicia desde el menú.

Pero, ¿qué pasa si inicia un programa que se elimina a sí mismo? Que no encontrará el programa eliminado e informará de uno incorrecto, si hay un segundo en la ruta.

Entonces esa es una condición de carrera. Si sabe que sus programas no se eliminan o no se mueven mientras investiga su ubicación, ps v -C NAMEy which NAMEdeberían funcionar bastante bien.


¿Funcionará esto siempre? ¿Y si tengo un ejecutable en dos directorios diferentes y ejecuto ./someexecutableen ambos?
apoorv020

No, por supuesto que no, porque ambos aparecerán como ./someexecutable o / bin / bash ./someexecutable
usuario desconocido el

-4

Continúe y elimine ambos archivos (sin la opción force -f). ¡El archivo que se elimina es el que no se estaba ejecutando!

El bloqueo de archivos ejecutables del sistema no le permitirá eliminar ningún archivo que se esté ejecutando actualmente.


Su respuesta no proporciona una respuesta real a la pregunta.
Risto Salminen

44
También está mal. Puede eliminar ejecutables en ejecución sin problema. ¿Cómo crees que los paquetes como init, que siempre se están ejecutando, se actualizan? No puede modificar un ejecutable en ejecución.
Patrick

1
Esto es alarmantemente incorrecto - no hagas esto
Michael Mrozek
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.