Linux: ¿encuentra el directorio de trabajo actual de un proceso?

11

Si tengo un PID X de proceso, ¿cómo puedo averiguar en qué directorio se estaba ejecutando? Puedo ver con ps aux | grep Xla línea de comando completa con la que se invocó. Sin embargo, en este caso es ./script.sh, y quiero ver cuál script.shse está ejecutando.

Rory
fuente

Respuestas:

11

El problema /proc/PID/exees que, para los scripts de shell, muestra la ubicación del shell. El problema /proc/PID/cwdes que muestra el directorio de trabajo actual 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 ve "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 utilizó 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 mostrar qué script se está ejecutando. Para empezar, ./todo lo que necesitas es procdir.

Pausado hasta nuevo aviso.
fuente
pwdx es mejor que esto.
Bjorn
8

Hay una respuesta más simple, y es para usar pwdx, como se detalla aquí

Markus Jevring
fuente
Esta es la mejor respuesta.
Bjorn