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


93

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

Respuestas:


110
% sudo ls -l /proc/PID/exe

p.ej:

% ps -auxwe | grep 24466
raíz 24466 0.0 0.0 1476 280? S 2009 0:00 supervisar sshd
% sudo ls -l / proc / 24466 / exe
lrwxrwxrwx 1 raíz raíz 0 1 de febrero 18:05 / proc / 24466 / exe -> /package/admin/daemontools-0.76/command/supervise

1
En mi sistema (ubuntu 14.04) no es necesario ser superusuario para ejecutar el lscomando.
jarno

3
@jarno ls: cannot read symbolic link /proc/28783/exe: Permission denied: no se trata de ejecutar el lscomando, se trata de acceder a la información del proceso de un proceso que no le pertenece. En mi cuadro, aproximadamente el 97% de todos los procesos enumerados en / proc son procesos raíz, y los otros se distribuyen en 11 usuarios diferentes.
Irfy

20

Utilizar:

pwdx $pid

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

Por lo general, el whichcomando le indicará qué se invoca desde el shell:

#> which vlc
/usr/bin/vlc

3
esta respuesta necesita más
votos positivos

8
@Kokizzu No, no lo hace porque no responde la pregunta en absoluto. El comando which solo le dice qué binario se ejecutará si ejecuta el comando ahora. La pregunta era "qué binario ya se está ejecutando allí". Imagine, por ejemplo, tener una docena de jdks en su computadora. Si desea saber para un proceso java en ejecución de qué jdk se ha tomado, lo que no lo ayuda con eso. Solo le dirá de qué jdk se tomará, si lo ejecuta ahora. La respuesta aceptada es también la correcta.
noamik

Una forma obvia de esta respuesta es incorrecta: en mi máquina ejecuto procesos con diferentes versiones de JDK y algunos 32 bits / 64 bits. Si deseo identificar la versión correcta de jstack / jmap para el proceso, la respuesta anterior no funcionará mientras que la respuesta aceptada sí.
Daniel Da Cunha

@Kokizzu Esto solo responde a la pregunta, "¿Cuál es el directorio de trabajo actual del proceso $pid?" La publicación editada aún no responde la pregunta. whichsimplemente dice "Si el comando está en el camino, entonces, ¿qué es?"
John Strood

pwdxdevuélvame el camino absoluto del programa ejecutable del proceso dependiendo de pid en redhat x64 6.3.
Nick Dong

14

Una forma es ps -ef


55
no funcionó para un servicio específico, solo proporcionó la ruta relativa
Jader Dias

Me ayudó a identificar un proceso a través del comando con el que se inició.
jpierson


2

La respuesta rápida es usar las psopciones o la /procinformación del sistema de archivos. Eso generalmente funcionará, pero no está garantizado. En general, no hay una respuesta definitiva y garantizada. Por ejemplo, ¿qué sucede si el archivo en ejecución se elimina durante la ejecución, de modo que no haya una ruta al archivo?

Consulte las Preguntas frecuentes de Unix para obtener un poco más de detalle, en particular las preguntas 4.3 y 4.4.


2

¿Por qué todos esperan que sepas el PID? Aquí está la forma amigable para los humanos:

pwdx `pgrep ###process_name###`

La pregunta dice "como puedo ver con ps", por lo que probablemente mostrará el PID
Scz

Ah ok cierto. Todavía encuentro que este es un revestimiento más rápido en muchos de mis casos de uso.
moodboom

1

lsof es una opción. Puedes probar algo como a continuación:

lsof -p PROCESS_ID

Esto enumerará todos los archivos abiertos por el proceso, incluida la ubicación real del ejecutable. Entonces es posible agregar un poco más de awk, cut, grep, etc. para encontrar la información que está buscando.

Como ejemplo, ejecuté los siguientes comandos para identificar de dónde vino mi proceso 'java':

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


¿Cómo es esto diferente de las respuestas ya publicadas exactamente?
Pimp Juice IT

0

Podrías 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 el camino absoluto. PID es el proceso.

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.