Linux – Descubra o diretório de trabalho atual de um processo?

Linux – Descubra o diretório de trabalho atual de um processo?

Se eu tiver um processo PID X, como posso descobrir em qual diretório ele estava sendo executado? Posso ver com ps aux | grep Xa linha de comando completa com a qual foi invocado. No entanto, neste caso, é ./script.sh, e quero ver qual script.shestá sendo executado.

Responder1

O problema /proc/PID/exeé que, para scripts de shell, mostra a localização do shell. O problema /proc/PID/cwdé que isso mostra oatualdiretório de trabalho do processo. Se o processo mudar de diretório, isso será refletido no destino desse link simbólico.

Isso mostrará qual era o $PWD no momento em que o script foi iniciado (substitua o ID do processo de seu interesse onde você vê "PID"):

procdir=$(grep -az "\bPWD" /proc/PID/environ); echo $procdir

ou simplesmente:

grep -az "\bPWD" /proc/PID/environ

Isso mostrará o comando que o iniciou para que você possa ver se um diretório relativo ou absoluto foi usado:

proccmd=$(grep -az PROC_NAME /proc/PID/cmdline); echo $proccmd

ou simplesmente:

grep -az PROC_NAME /proc/PID/cmdline

Juntos, eles devem mostrar qual script está sendo executado. Para começar, ./tudo que você precisa é procdir.

Responder2

Há uma resposta mais simples, e é para usar pwdx, conforme detalhadoaqui

informação relacionada