2010-02-01 13:48:15 +0000 2010-02-01 13:48:15 +0000
99
99

¿Cómo puedo saber la ruta absoluta de un proceso en ejecución?

Si tengo varias copias de la misma aplicación en el disco, y sólo una se está ejecutando, como puedo ver con ps, ¿cómo puedo saber la ruta absoluta para distinguirla de las demás?

Respuestas (8)

117
117
117
2010-02-01 17:04:22 +0000
% sudo ls -l /proc/PID/exe

ej.:

% ps -auxwe | grep 24466 root 24466 0.0 0.0 1476 280 ? S 2009 0:00 supervise sshd % sudo ls -l /proc/24466/exe lrwxrwxrwx 1 root root 0 Feb 1 18:05 /proc/24466/exe -\> /package/admin/daemontools-0.76/command/supervise
21
21
21
2013-05-03 06:48:17 +0000

Utilice:

pwdx $pid

Esto le da el directorio de trabajo actual del pid, no su ruta absoluta.

Normalmente el comando which le dirá cuál está siendo invocado desde el shell:

#> which vlc
/usr/bin/vlc
14
14
14
2010-02-01 13:58:59 +0000

Una forma es ps -ef

4
4
4
2010-02-01 13:53:01 +0000
3
3
3
2017-10-09 15:49:14 +0000

lsof es una opción. Puede probar algo como lo siguiente:

lsof -p PROCESS_ID

Esto listará todos los archivos abiertos por el proceso incluyendo la ubicación real del ejecutable. A continuación, es posible añadir unos cuantos awk, cut, grep, etc. para encontrar la información que se busca.

Como ejemplo, ejecuté los siguientes comandos para identificar de dónde venía mi proceso ‘java’:

lsof -p 12345 | awk ‘{print $NF}’ | grep ‘java$’

2
2
2
2010-02-01 14:45:10 +0000

La respuesta rápida es utilizar ps con opciones o la información del sistema de archivos /proc. Esto normalmente funcionará, pero no está garantizado. En general, no hay una respuesta definitiva y garantizada. Por ejemplo, ¿qué pasa si el archivo que se está ejecutando se borra durante la ejecución, de modo que no hay ruta al archivo?

Vea el FAQ de Unix para un poco más de detalle, particularmente las preguntas 4.3 y 4.4.

2
2
2
2016-04-27 23:28:20 +0000

¿Por qué todo el mundo espera que conozcas el PID? Esta es la forma amigable para los humanos:

pwdx `pgrep ###process_name###`
0
0
0
2016-03-05 11:35:41 +0000

Puedes usar

readlink /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe

o

find /proc/$(pgrep -x -U $(id -ur) APP_NAME)/exe -printf "%l\n"

para obtener la ruta absoluta. El PID es el proceso.

Preguntas relacionadas

6
10
10
5
3