Como posso saber quais arquivos um processo abriu?

5

Eu tenho um processo daemon e quero saber quais arquivos ele tem aberto (e idealmente qual é o seu CWD). Existe algum comando shell que possa me dizer isso?

    
por Denis Hennessy 30.07.2009 / 01:47

4 respostas

16

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!

    
por 30.07.2009 / 02:08
12

Se você tiver o comando lsof disponível [o que a maioria dos * nix sabores faz] você usaria:

lsof -p NNN

para listar arquivos abertos pelo processo NNN. Eu não usei o BSD há algum tempo, mas da memória fuser é um paralelo próximo ao lsof.

Não tenho certeza de um comando para encontrar o cwd de um processo, mas no Linux o cwd é vinculado simbolicamente no diretório / proc do processo, isto é. / proc / NNN / cwd.

    
por 30.07.2009 / 02:01
3

se você conhece os processos PID, você pode apenas emitir um

lsof | grep YOURPID

Rápido e fácil de lembrar.

ou

lsof -c yourprogramexecutable
    
por 30.07.2009 / 01:53
1

Experimente o lsof se estiver instalado no seu sistema

D

    
por 30.07.2009 / 01:54