Como obter o número de descritores de arquivos abertos para o usuário

4

Eu sei sobre lsof e ls /proc/*/fd , mas nenhum deles é AFAIK atômico. Porque no último caso, eu precisaria obter todos os pids para o usuário e, em seguida, filtrar por eles e, nesse momento, alguns dos descritores de arquivos poderiam ser fechados.

Talvez haja alguma chamada de sistema para isso ou algo assim, porque obviamente o sistema operacional rastreia esse número, pois ele se recusaria a criar FD se o limite máximo de usuário estivesse esgotado.

    
por user1685095 25.04.2016 / 15:16

1 resposta

1

Eu não fiz uma pesquisa intensiva, mas não acho que o que você está procurando exista no Linux. Abrir um descritor de arquivo não recebe nenhum bloqueio global, apenas um bloqueio por processo, portanto, em uma máquina multicore, o que você estiver usando para contar o número de descritores de arquivos abertos pode estar sendo executado literalmente ao mesmo tempo que outros threads abrindo ou fechando arquivos em outros núcleos.

O Linux não possui um limite global no número total de arquivos abertos. Não há limite explícito por usuário também. Há um limite por usuário em processos e um limite por processo em números de descritores de arquivos, o que indiretamente impõe um limite a arquivos abertos por usuário, mas isso não é explicitamente controlado.

Explorar /proc (que é o que o lsof faz sob o capô) é o melhor possível. /proc é a API do Linux para obter informações sobre processos.

    
por 26.04.2016 / 01:29