Eu tenho um programa que gera vários processos filhos.
Quero saber quais arquivos este programa e seus filhos estão criando, excluindo e modificando.
inotifywait
pode me dizer quais arquivos estão sendo acessados, mas não pode me dizer qual processo está fazendo isso. E preciso saber onde os arquivos estão sendo criados para configurar o monitor.auditctl
me permitirá registrar quais processos modificam um arquivo, mas, novamente, preciso saber onde os arquivos estão para configurar o registro.lsof
me contará todos os arquivos, mas não parece ser uma boa solução para rastreamento em tempo real.
Existe algo que me permita monitorar a manipulação de arquivos de um programa sem saber a priori quais arquivos serão manipulados?
Responder1
No Linux você pode usar strace
para monitorar este tipo de eventos:
strace -f -p <PID> -e trace=file
No Solaris, você pode usar dtrace
. Dê uma olhada na ferramenta DTraceToolkit opensnoop
, que é instalada por padrão no Solaris 11 em /usr/dtrace/DTT/Bin/opensnoop
.
/usr/dtrace/DTT/Bin/opensnoop -p <pid>
Responder2
Para Linux: o opensnoop das perf-tools do Brendengreg deve fazer o trabalho https://github.com/brendangregg/perf-tools
Para Solaris Dtrace existe de qualquer maneira