Você pode observar facilmente que um programa está executando operações de disco de E/S usando um monitor de processo. Existe uma maneira fácil de observar exatamente quais arquivos estão sendo lidos/gravados por cada processo?
Soluções Windows/Linux são bem-vindas!
No Windows, você usaria um aplicativo literalmente chamado Process Monitor ou ProcMon, abreviado. Ele captura todos os acessos a arquivos e registros – não apenas o estado "atual", mas cada operação individual.
Esse tipo de ferramenta é particularmente útil, pois muitos arquivos são abertos-lidos-fechados rapidamente, não mantidos abertos por longos períodos.
O equivalente aproximado do Linux ao ProcMon é
strace
. Para ver todas as chamadas de sistema relacionadas a arquivos:Outras ferramentas semelhantes são
perf trace
eltrace
. BSDs têmktruss
, eu acho.O rastreamento de sistema altamente flexível pode ser feito por meio
bpftrace
de um SystemTapstap
(ambos semelhantes ao Solarisdtrace
). Eles demoram um pouco para aprender, no entanto. Relacionado .O subsistema de auditoria do Linux , com
auditctl
, pode ser usado para rastrear operações em arquivos específicos, independentemente do processo pelo qual elas são feitas. Por exemplo, você pode ver o que está acessando sua chave privada ~/.ssh/id_rsa.(Da mesma forma, LSMs como AppArmor podem ser executados no modo "reclamar" ou "permissivo", onde eles apenas registram operações que seriam negadas, mas na verdade não as negam.)
O subsistema fanotify pode ser usado para obter um feed firehose de todo o sistema de todos os arquivos que estão sendo acessados, por exemplo, usando a
fatrace
ferramenta. (É semelhante ao inotify, que é por diretório;inotifywait -rmq ~/foo
monitoraria esse diretório recursivamente.)Eu gosto do OpenedFilesView porque sou velho. Confira também o Process Explorer e o Resource Monitor (resmon).
Use o Windows-R para abrir a caixa de execução. Digite
resmon
e pressione a tecla Enter.Em * nix eu usaria lsof .