Como posso ver quanto de um arquivo foi lido por um processo ativo?

3

Geralmente, tenho um trabalho de longa duração em que um aplicativo lê um arquivo grande (> 2 GB) e executa o processamento em cada registro.

Existe algum comando do UNIX que eu possa usar para ver a profundidade do processo? O aplicativo terá apenas um identificador de arquivo para o arquivo de entrada.

    
por Bio_X2Y 17.10.2010 / 00:54

3 respostas

3

Experimente pv , visualizador de canais

    
por 17.10.2010 / 01:10
2

Eu sempre me perguntei se o "offset" do lsof informa a posição atual de leitura do arquivo no arquivo, mas a documentação realmente não explica isso claramente e eu nunca me preocupei em testar ou verificar minhas suposições. link

Ao escrever processos de longa duração, tenho a tendência de fazer com que eles gravem informações em um arquivo de log que eu possa examinar periodicamente (por exemplo, tail -f) ou fazer com que relatem periodicamente o progresso (por exemplo, uma opção -v uma vez por segundo).

    
por 17.10.2010 / 01:17
0

Este programa aceita pipes / STDIN / STDOUT? Se assim for, você está com sorte. Vou demonstrar com md5sum'ing um arquivo grande:

$ pv 2GB.zero | md5sum -
1.56GB 0:00:31 [60.2MB/s] [===============================>         ] 80% ETA 0:00:07
f3444be3893c1b9b6fa9dd1acde671a9  -

pv "{filename}" irá ler o arquivo, canalizá-lo para qualquer coisa que suporte um pipe. Você também pode fazer cat "{filename}"|pv| md5sum - , mas pv não saberá quantos bytes o arquivo é, portanto, saberá apenas quão rápido está indo, agora quanto resta.

As possibilidades são infinitas. Sempre que você estiver usando um pipe ou redirecionando para um arquivo, basta adicionar pv no pipeline para informar a você o quão rápido os dados estão passando pelo canal! :)

    
por 24.08.2011 / 22:41

Tags