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?
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:
% 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
ls: cannot read symbolic link /proc/28783/exe: Permission denied
: no se trata de ejecutar el ls
comando, 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.
Utilizar:
pwdx $pid
Esto le proporciona el directorio de trabajo actual del pid, no su ruta absoluta.
Por lo general, el which
comando le indicará qué se invoca desde el shell:
#> which vlc
/usr/bin/vlc
$pid
?" La publicación editada aún no responde la pregunta. which
simplemente dice "Si el comando está en el camino, entonces, ¿qué es?"
pwdx
devuélvame el camino absoluto del programa ejecutable del proceso dependiendo de pid en redhat x64 6.3.
Una forma es ps -ef
ps auxwwwe
Fuente:
https://serverfault.com/questions/62322/getting-full-path-of-executables-in-ps-auxwww-output
La respuesta rápida es usar las ps
opciones o la /proc
informació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.
¿Por qué todos esperan que sepas el PID? Aquí está la forma amigable para los humanos:
pwdx `pgrep ###process_name###`
ps
", por lo que probablemente mostrará el PID
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 $'
ls
comando.