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