Se ho un comando convogliato come
cat myfile | processor_application
dove processor_application è qualcosa che legge dallo standard in, a pezzi, per elaborare, è possibile vedere quanto è arrivato il file cat?
Forse usando lsof?
Grazie!
Se ho un comando convogliato come
cat myfile | processor_application
dove processor_application è qualcosa che legge dallo standard in, a pezzi, per elaborare, è possibile vedere quanto è arrivato il file cat?
Forse usando lsof?
Grazie!
Risposte:
Puoi usare pv per fare questo ad es
pv file | processor_application
Quando pv passa il suo stdin direttamente al suo stdout, non è necessario usare cat.
Modifica
Poiché il programma è già in esecuzione, trova il PID del cat
processo e guarda i contenuti di
/proc/<PID>/io
che ti dirà quanti byte ha scritto - wchar.
Assolutamente! Pipe Viewer lo fa esattamente. Basta inserirlo nella pipeline:
cat myfile | pv | processor_application
È possibile ottimizzare via cat
nell'esempio sopra:
pv myfile | processor_application
Il che ha il vantaggio di fornire un indicatore di progresso effettivo, poiché pv può determinare direttamente la dimensione dell'input. Se usi pv nel mezzo di una pipeline, devi fornire tu stesso le dimensioni del file per ottenere progressi accurati:
input_process | pv -s 100M -p | processor_application
Controlla il sito Web per ulteriori opzioni per personalizzare il pv.
pv
quando è disponibile :-)
pv
in una pipeline usando mkfifo
e gdb
(quattro syscalls con gdb p
).
Se il processo è già in esecuzione lsof ha una size/offset
colonna che può esserti utile: trova il PID del processo cat che desideri controllare e quindi lsof -o -p [PID]
.
Se il processo non è ancora in esecuzione, pv
come suggerito da altri è una buona opzione (supponendo che il sistema disponga di tale utilità).
-o
non funziona sul tuo sistema, penso che tu sia praticamente fregato per quanto riguarda l'utilizzo lsof
: - / (suppongo che tu stia eseguendo lsof come l'utente che ha avviato il cat
processo o come root?)