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

11

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

    
por Rory 28.01.2010 / 10:57

2 respostas

11

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

Isso mostrará o que o $ PWD estava 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 a você qual script está sendo executado. Para começar com ./ , tudo que você precisa é procdir .

    
por 28.01.2010 / 14:02
8

Existe uma resposta mais simples, e é usar pwdx , como detalhado aqui

    
por 20.09.2010 / 08:45

Tags