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 catprocesso 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 catnell'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.
pvquando è disponibile :-)
pvin una pipeline usando mkfifoe gdb(quattro syscalls con gdb p).
Se il processo è già in esecuzione lsof ha una size/offsetcolonna 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, pvcome suggerito da altri è una buona opzione (supponendo che il sistema disponga di tale utilità).
-onon 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 catprocesso o come root?)