No Linux, como posso ver até que ponto um processo está em um arquivo?


12

Se eu tiver um comando canalizado, como

   cat myfile | processor_application

onde application_do_processador é algo que lê do padrão em, em pedaços, para processar, é possível ver até que ponto o arquivo cat chegou?

Possivelmente usando lsof?

Obrigado!


Obrigado pelas respostas até agora! No entanto, eu deveria ter sido mais claro: o comando já está sendo executado.
— Wodow 31/01

Ah sim, então pv não é tão útil. Você pode editar sua pergunta original para deixar isso mais claro.
— Phil Hollenback

Na verdade, existem três ótimas respostas separadas nesta pergunta agora, então vou deixar como está.
— Wodow 31/01

1
Resumindo, são eles: 1. Use pv (antes de começar) 2. Use lsof -o (se houver suporte para compensações) 3. observe o valor do wchar em / proc / <PID> / io, para o PID conhecido do gato processo
— wodow 31/01

Respostas:


12

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

pv file | processor_application

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

Editar Como seu programa já está sendo executado, localize o PID do catprocesso e verifique o conteúdo de

/proc/<PID>/io

que lhe dirá quantos bytes ele escreveu - wchar.


Acabei de ver sua edição! Isso funciona perfeitamente, dada a ausência de (i) pv na cadeia, (ii) lsof -o trabalho. Obrigado!
— Wodow 31/01

9

Absolutamente! Tubulação Visualizador faz exactlty isso. Basta inseri-lo no seu pipeline:

cat myfile | pv | processor_application

Você pode otimizar cato exemplo acima:

pv myfile | processor_application

Qual tem a vantagem de fornecer um indicador de progresso real, já que o pv pode determinar diretamente o tamanho da entrada. Se você usar o 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 o site para mais opções para personalizar o pv.


Eu gosto pvquando está disponível :-)
— voretaq7 31/01

É bastante fácil inserir pvum pipeline usando mkfifoe gdb(quatro syscalls com gdb's p).
— precisa saber é o seguinte

@ Grarawity você não pode provocar assim. Escreva uma resposta real e demonstre - estou muito curioso agora.
— Phil Hollenback

2
Muito hack para ser uma resposta, mas aqui.
— usar o seguinte comando

6

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

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


Esta é a opção lsof que eu havia analisado. Mas: e se lsof -o não for permitido ou indisponível no sistema?
— Wodow 31/01

Se -onão funciona em seu sistema Eu acho que você está muito bem parafusado no que diz respeito ao uso de lsof: - / (eu suponho que você está correndo lsof como o usuário que lançou o catprocesso, ou como root?)
— voretaq7

Sim, tentei os dois. Eu estou procurando por razões que lsof adverte -o como não está disponível agora ...
— wodow 31/01

O FAQ do lsof, espelhado em gd.tuwien.ac.at/utils/admin-tools/lsof/FAQ , implica no ponto / pergunta 3.43.2.3 que o lsof -o não é possível no Linux! Eu suponho que este é mais ampla, como outros usuários parecem estar usando lsof -o
— wodow
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.