como coletar todos os arquivos, que são abertos pelo aplicativo linux

2

Eu quero coletar uma lista de todos os arquivos, que são abertos por um aplicativo (no meu caso, é um bulbo s / w).

'strace -f' falha, porque mistura a abertura contínua de diferentes garfos, por exemplo:

13078 open("file1", O_RDONLY <unfinished ...>
13077 open("file2", O_RDONLY|O_LARGEFILE) = 3
13078 <... open resumed> )              = 3

e não consigo rastrear, se o "arquivo1" for realmente aberto ou falhou com E_NOENT.

'strace -ff' também falha, pois cria muitos arquivos (o aplicativo cria um número muito grande de subprocessos) e cria um programa. $ {pid}, programa. $ {pid + 1} e assim por diante , depois de aproximadamente 32k forks ele cria e reescreve o programa $ {pid}, programa. $ {pid + 1}. Eu posso pesquisar como aumentar a numeração do processo, mas de qualquer forma eu não quero esse grande número de arquivos.

Então a questão é, posso resolver este problema rápido e sujo com strace ou outra ferramenta?

    
por Sergey 26.03.2014 / 15:26

1 resposta

1

strace -f -eopen /path/to/cmd args ... 2>&1 | gzip > output.log.gz

Se você estiver procurando por um processo específico e não todos os filhos, então:

gunzip output.log.gz | head -n500 | less

Leia o arquivo até encontrar o ID do processo (pid) do programa específico que você está procurando e, em seguida, use grep .

Se você está procurando por resultados específicos (como a ausência do ENOENT), você pode encontrá-los:

zgrep --invert-match ENOENT output.log.gz | less

    
por 26.03.2014 / 15:39

Tags