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.