Eu amo lsof
, mas acho que é um exagero para uma pergunta simples como essa. O sistema de arquivos /proc
contém tudo o que você deseja saber. Talvez um exemplo seja melhor:
# ps ax|grep tail 7196 pts/4 S+ 0:00 tail -f /var/log/messages 8773 pts/0 R+ 0:00 grep tail # ls -l /proc/7196/cwd lrwxrwxrwx 1 insyte insyte 0 2009-07-29 19:05 /proc/7196/cwd -> /home/insyte # ls -l /proc/7196/fd total 0 lrwx------ 1 insyte insyte 64 2009-07-29 19:05 0 -> /dev/pts/4 lrwx------ 1 insyte insyte 64 2009-07-29 19:05 1 -> /dev/pts/4 lrwx------ 1 insyte insyte 64 2009-07-29 19:02 2 -> /dev/pts/4 lr-x------ 1 insyte insyte 64 2009-07-29 19:05 3 -> /var/log/messages
Como você pode ver, o diretório /proc/$PID
contém um link simbólico chamado "cwd" que vincula o CWD do processo. O mesmo vale para os descritores de arquivo abertos listados em /proc/$PID/fd
.
A hierarquia /proc/$PID
contém muitas informações sobre todos os processos em execução. Vale a pena bisbilhotar!