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

11

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

Rory
fonte

Respostas:

11

O problema /proc/PID/exeé que, para scripts de shell, ele mostra a localização do shell. O problema /proc/PID/cwdé que isso mostra o diretório de trabalho atual do processo. Se o processo alterar os diretórios, 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 em que você está interessado, 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 o que você precisa é procdir.

Pausado até novo aviso.
fonte
pwdx é melhor que isso.
Bjorn
8

Há uma resposta mais simples, que deve ser usada pwdx, conforme detalhado aqui

Markus Jevring
fonte
Essa é a melhor resposta.
Bjorn