
Si tengo un proceso PID X, ¿cómo puedo saber en qué directorio se estaba ejecutando? Puedo ver con ps aux | grep X
la línea de comando completa con la que fue invocado. Sin embargo, en este caso es ./script.sh
y quiero ver cuál script.sh
se está ejecutando.
Respuesta1
El problema /proc/PID/exe
es que, para los scripts de shell, muestra la ubicación del shell. El problema /proc/PID/cwd
es que se muestra elactualdirectorio de trabajo del proceso. Si el proceso cambia de directorio, eso se refleja en el destino de ese enlace simbólico.
Esto mostrará cuál era el $PWD en el momento en que se inició el script (sustituya el ID del proceso que le interesa donde vea "PID"):
procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir
o simplemente:
grep -az "\bPWD" /proc/PID/environ
Esto mostrará el comando que lo inició para que pueda ver si se usó un directorio relativo o absoluto:
proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd
o simplemente:
grep -az PROC_NAME /proc/PID/cmdline
Juntos, estos deberían mostrarle qué script se está ejecutando. Para empezar, ./
todo lo que necesita es procdir
.
Respuesta2
Hay una respuesta más sencilla, y es usar pwdx
, como se detallaaquí