Porque na maneira como você está usando lsof
, você está contando tudo, não apenas os descritores de arquivo, use algo assim:
lsof -n -p <pid_number> | awk '$5 ~ /([0-9].+)/'
Mas a maneira mais fácil é:
ls -l /proc/673/fd | wc -l
Executando o debian jessie. O seguinte é feito como root para evitar quaisquer problemas de permissão. Primeiro eu encontro o pid do meu programa, então eu verifico o seu limite de arquivo aberto para verificar se ele está configurado para 1024. Mas quando eu conto o número de arquivos abertos, eu encontro 1851.
$ pgrep -x process_name
673
$ prlimit --pid 673 --nofile
RESOURCE DESCRIPTION SOFT HARD UNITS
NOFILE max number of open files 1024 4096
$ lsof -n -p 673 | grep -c "IPv4"
1851
Para uma boa medida, eu verifico que o processo não possui nenhum subprocesso que possa estar delegando aberturas de arquivos para:
$ pgrep -P 673
# no output
O que está errado aqui?
Porque na maneira como você está usando lsof
, você está contando tudo, não apenas os descritores de arquivo, use algo assim:
lsof -n -p <pid_number> | awk '$5 ~ /([0-9].+)/'
Mas a maneira mais fácil é:
ls -l /proc/673/fd | wc -l