Histórico: estou brincando de monitorar o ulimit para executar processos para um usuário específico. (Ocasionalmente, vi processos que estavam iniciando com um limite incorreto.) Perguntei a alguns gurus do Linux que se professavam e um sugeriu lsof -p <pid>
, enquanto o outro sugeriu ls /proc/<pid>/fd
, mas nenhum foi positivo sobre o que reflete com mais precisão a contagem real em relação ao máximo limite de arquivos abertos para um processo.
Então, qual é?
lsof -p <pid> | wc -l
Ou
ls /proc/<pid>/fd | wc -l
Por favor, elabore a diferença. Obrigado!
lsof
páginas de manual e, embora suspeitasse que a resposta fosse arquivos mapeados na memória, queria a confirmação de uma pessoa mais experiente.Respostas:
lsof
também fornecerá arquivos .so mapeados na memória - o que tecnicamente não é o mesmo que um manipulador de arquivos que o aplicativo tem controle./proc/<pid>/fd
é o ponto de medição para descritores de arquivos abertos - no entanto: mencionado na página proc-man - se o encadeamento principal de um programa multithread tiver terminado, esse diretório estará indisponível.lsof -p <pid> | grep -v mem | egrep -v '^COMMAND PID' | wc -l
mostrará os mesmos itens quels /proc/<pid>/fd | wc -l
.Os mapas de memória estão disponíveis em
/proc/<pid>/maps
.fonte
lsof
dá-lhe quase a mesma saída, mas inclui tambémcwd
,rtd
etxt
descritores de arquivos.COMMAND
ePID
pode variar. Substitua os espaços por[[:space:]]*
para torná-lo mais geral.lsof -a -p <pid> -d ^mem -d ^cwd -d ^rtd -d ^txt -d ^DEL | wc -l
aqui , enquanto olsof
shell do Android (adb shell
) não suporta-a
e-d
. Então eu uso a versão do Kvisle finalmente.