Monitorar continuamente os arquivos abertos / acessados ​​por um processo


Respostas:


31

Tente com strace -p 12345; deve fazer o que você está tentando alcançar.

A saída pode ser filtrada para exibir apenas os arquivos abertos ( comentário de Dan D. ):

strace -e open -p 12345

Nota: você também pode rastrear rapidamente os processos em execução com strace -e open <command>.


saída não é amigável e muitas coisas extras.
MA1

Você pode corrigir isso canalizando - strace -p {pid} | grep -i "Open" | tee files_opened.log. A chave é grep, que permite filtrar a saída da chamada do sistema que você deseja (por exemplo open()).

11
@Ninefingers Na verdade stracepode fazer isso melhor do que grepcom a -eopção:strace -e open
Dan D.

@DanD oh sim, ofc :)

Quando eu mato o comando strace, ele também mata o que está rastreando. Por que isso está acontecendo (cygwin)?
CMCDragonkai

6

O novo utilitário fatrace fará isso: https://launchpad.net/fatrace/

sudo fatrace | grep '(6514)'

Não use a opção -p, isso significa o oposto do que significa no lsof ou em outros utilitários.


3

Isso repetirá o comando e limpará a tela toda vez:

watch "lsof -p 12345"

AVISO: isso perderá acesso rápido a arquivos e é adequado apenas para ver arquivos antigos


2
Isso é um pouco desajeitado em comparação com a outra resposta usada strace.
David Foerster

1
Essa é uma solução imprecisa - um processo pode usar arquivos entre as execuções delsof
Dor

@Dor, você pode definir o tempo de lsof como sub 1 segundo e aumentar sua precisão. Embora seja desajeitado em comparação com os outros, você está errado, pois é uma solução imprecisa.
22414 Jordon Bedwell

Se você estiver procurando uma operação de arquivo longo (como um backup de banco de dados), essa pode ser uma boa alternativa simples.
jcalfee314
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.