No Linux, como posso ver até onde um arquivo é um processo?

12

Se eu tiver um comando canalizado como

   cat myfile | processor_application

em que processor_application é algo que lê desde o padrão, em pedaços, até o processo, é possível ver até onde o arquivo cat tem?

Possivelmente usando lsof?

Obrigado!

    
por wodow 31.01.2011 / 17:49

3 respostas

12

Você pode usar pv para fazer isso, por exemplo,

pv file | processor_application

Quando pv passa, é stdin diretamente para o stdout, e você não precisa usar o cat.

Editar Como seu programa já está em execução, encontre o PID do processo cat e, em seguida, examine o conteúdo de

/proc/<PID>/io

que lhe dirá quantos bytes ele escreveu - wchar.

    
por 31.01.2011 / 19:15
9

Absolutamente! O Pipe Viewer faz exatamente isso. Basta inserir no seu pipeline:

cat myfile | pv | processor_application

Você pode otimizar o cat no exemplo acima:

pv myfile | processor_application

Qual tem a vantagem de fornecer um indicador de progresso real, pois o pv pode determinar o tamanho da entrada diretamente. Se você usar pv no meio de um pipeline, precisará fornecer o tamanho do arquivo para obter um progresso preciso:

input_process | pv -s 100M -p | processor_application

Verifique no site mais opções para personalizar pv.

    
por 31.01.2011 / 17:59
6

Se o processo já estiver em execução, o lsof tem uma coluna size/offset que pode ser útil para você - encontre o PID do processo do gato que você deseja inspecionar e, em seguida, lsof -o -p [PID] .

Se o processo ainda não estiver em execução, pv como os outros sugeriram é uma boa opção (supondo que seu sistema tenha esse utilitário).

    
por 31.01.2011 / 18:01

Tags