En el entorno de Windows hay una API para obtener la ruta que ejecuta un proceso. ¿Hay algo similar en Unix / Linux?
¿O hay alguna otra forma de hacerlo en estos entornos?
En Linux, el enlace simbólico /proc/<pid>/exe
tiene la ruta del ejecutable. Use el comando readlink -f /proc/<pid>/exe
para obtener el valor.
En AIX, este archivo no existe. Podrías comparar cksum <actual path to binary>
y cksum /proc/<pid>/object/a.out
.
sudo
Si la salida está vacía, algunos procesos son creados por otros usuarios del sistema.Puede encontrar el exe fácilmente de esta manera, simplemente pruébelo usted mismo.
ll /proc/<PID>/exe
pwdx <PID>
lsof -p <PID> | grep cwd
fuente
pwdx <PID>
me dio la ubicación del enlace simbólico para que pudiera encontrar los registros y detener el proceso de manera adecuada.ll
por lo general es un alias:alias ll='ls -alF'
.Un poco tarde, pero todas las respuestas fueron específicas de Linux.
Si también necesita unix, entonces necesita esto:
EDITADO: Se corrigió el error reportado por Mark lakata.
fuente
"/proc/self/exe"
consprintf(foo,"/proc/%d/exe",pid)
Yo suelo:
Reemplace 786 con su PID o nombre de proceso.
fuente
pwdx <process id>
Este comando buscará la ruta del proceso desde donde se está ejecutando.
fuente
En Linux cada proceso tiene su propia carpeta
/proc
. Entonces podría usargetpid()
para obtener el pid del proceso en ejecución y luego unirlo con la ruta/proc
para obtener la carpeta que, con suerte, necesitará.Aquí hay un breve ejemplo en Python:
Aquí también está el ejemplo en ANSI C:
Compilarlo con:
fuente
No existe un método "garantizado para trabajar en cualquier lugar".
El paso 1 es verificar argv [0], si el programa se inició por su ruta completa, esto (generalmente) tendría la ruta completa. Si se inició por una ruta relativa, se mantiene lo mismo (aunque esto requiere obtener el directorio de trabajo actual, usando getcwd ().
El paso 2, si no se cumple ninguno de los anteriores, es obtener el nombre del programa, luego obtener el nombre del programa de argv [0], luego obtener la RUTA del usuario del entorno y revisar eso para ver si hay un adecuado binario ejecutable con el mismo nombre.
Tenga en cuenta que argv [0] está configurado por el proceso que ejecuta el programa, por lo que no es 100% confiable.
fuente
gracias: Kiwy
con AIX:
fuente
También puede obtener la ruta en GNU / Linux con (no probado exhaustivamente):
Si desea que el directorio del ejecutable cambie quizás el directorio de trabajo al directorio del proceso (para medios / datos / etc.), debe soltar todo después del último /:
fuente
El siguiente comando busca el nombre del proceso en la lista de procesos en ejecución y redirige el comando pid a pwdx para encontrar la ubicación del proceso.
Reemplace "abc" con su patrón específico.
Alternativamente, si puede configurarlo como una función en .bashrc, puede ser útil si lo necesita con frecuencia.
Por ejemplo:
Espero que esto ayude a alguien en algún momento .....
fuente
Encuentra la ruta a un nombre de proceso
fuente
pgrep
); en la siguiente línea obtiene la ruta del binario que se está ejecutando (/proc/$PID/exe
es un enlace simbólico al archivo ejecutable); y finalmente hace eco de ese enlace simbólico.