Como exibir descritores de arquivos abertos, mas não usando o comando lsof

46

Oi, eu li Aqui que lsof não é uma maneira precisa de obter o número de descritores de arquivo que estão abertos no momento . Ele recomendou usar este comando em vez

 cat /proc/sys/fs/file-nr

Enquanto este comando exibe o número de FD's, como você exibe a lista de descritores de arquivos abertos que o comando acima acabou de contar?

    
por dimas 27.02.2013 / 01:50

2 respostas

56

Existem dois motivos para que lsof | wc -l não conte descritores de arquivos. Uma delas é listar coisas que não são arquivos abertos, como bibliotecas vinculadas dinamicamente carregadas e diretórios de trabalho atuais; você precisa filtrá-los. Outra é que lsof leva algum tempo para ser executado, portanto, pode perder arquivos abertos ou fechados durante a execução; portanto, o número de arquivos abertos listados é aproximado. Observar /proc/sys/fs/file-nr fornece um valor exato em um determinado ponto no tempo.

cat /proc/sys/fs/file-nr só é útil quando você precisa do número exato, principalmente para verificar se há esgotamento de recursos. Se quiser listar os arquivos abertos, você precisa chamar lsof ou usar algum método equivalente, como arrastar /proc/*/fd manualmente.

    
por 27.02.2013 / 02:07
24

As informações do processo são mantidas dinamicamente pelo sistema nos diretórios sob / proc. Por exemplo, o processo com o PID 1234 terá um diretório chamado / proc / 1234.

Existem muitas informações, mas agora você está interessado no subdiretório / proc / 1234 / fd .

NOTA: Você precisa ter permissões de root para visualizar ou abrir arquivos para processos que não são de sua propriedade, bem como para processos de SetUID.

Exemplo:

root@johan-HP-ProBook-6560b-LG654EA-ACQ:/proc# ls -l 2443/fd
total 0
lr-x------ 1 johan johan 64 Feb 27 10:26 0 -> pipe:[13637]
l-wx------ 1 johan johan 64 Feb 27 10:26 1 -> /home/johan/.xsession-errors
lrwx------ 1 johan johan 64 Feb 27 10:26 10 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 11 -> anon_inode:[eventfd]
lrwx------ 1 johan johan 64 Feb 27 10:26 12 -> socket:[39495]
lrwx------ 1 johan johan 64 Feb 27 10:26 13 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 14 -> anon_inode:inotify
lrwx------ 1 johan johan 64 Feb 27 10:26 15 -> anon_inode:[eventfd]
l-wx------ 1 johan johan 64 Feb 27 10:26 16 -> pipe:[37885]
lr-x------ 1 johan johan 64 Feb 27 10:26 17 -> pipe:[37886]
l-wx------ 1 johan johan 64 Feb 27 10:26 2 -> /home/johan/.xsession-errors
l-wx------ 1 johan johan 64 Feb 27 10:26 21 -> pipe:[167984]
lr-x------ 1 johan johan 64 Feb 27 10:26 22 -> pipe:[167985]
l-wx------ 1 johan johan 64 Feb 27 10:26 23 -> pipe:[170009]
lr-x------ 1 johan johan 64 Feb 27 10:26 24 -> pipe:[170010]
lrwx------ 1 johan johan 64 Feb 27 10:26 3 -> anon_inode:[eventfd]
lr-x------ 1 johan johan 64 Feb 27 10:26 4 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 5 -> socket:[14721]
l-wx------ 1 johan johan 64 Feb 27 10:26 6 -> pipe:[14726]
lrwx------ 1 johan johan 64 Feb 27 10:26 7 -> socket:[14730]
lrwx------ 1 johan johan 64 Feb 27 10:26 8 -> socket:[13984]
lrwx------ 1 johan johan 64 Feb 27 10:26 9 -> socket:[14767]

root@johan-HP:/proc# cat 2443/fdinfo/2
pos:    1244446
flags:  0102001

Veja também o resto dos arquivos em / proc ... muitas informações úteis do sistema residem aqui.

    
por 27.02.2013 / 09:33