Existe uma interface proc para arquivos abertos: / proc / PID / fd /. É um diretório de links simbólicos. Todos os sockets abertos parecerão estar ligados a um ficheiro com o nome "socket: [INODE NUMBER]"
Eu sei que posso usar o comando
lsof -p xxxx | wc -l
para saber a contagem de arquivos abertos em um processo, ele funciona, mas, no entanto, é muito ineficiente. Eu tenho algum processo do servidor que tem muitos arquivos de soquete, o método wc -l nunca retorna o resultado. Então, qual é a maneira eficiente de saber quantos arquivos são abertos em um processo?
Obrigado.
Existe uma interface proc para arquivos abertos: / proc / PID / fd /. É um diretório de links simbólicos. Todos os sockets abertos parecerão estar ligados a um ficheiro com o nome "socket: [INODE NUMBER]"
Use ps -C <progname> -o pid= | wc -l
onde progname é o nome do processo em ps
-listing.
Algum contexto (cenários de caso de uso) pode fornecer uma melhor direção para respostas.
A documentação do lsof descreve alguns métodos que ele chama que podem bloquear por tempo indesejável. Eu sugeriria dar uma olhada na seção BLOCKS AND TIMEOUTS da lsof página do manual
.Você pode tentar o seguinte e ver se ele fornece resultados desejáveis:
lsof -bwp $pid | wc -l