Si tengo un comando canalizado como
cat myfile | processor_application
donde procesador_aplicación es algo que se lee desde el estándar en, en fragmentos, para procesar, ¿es posible ver qué tan lejos ha llegado el archivo cat?
Posiblemente usando lsof?
¡Gracias!
Respuestas:
Puedes usar pv para hacer esto, por ejemplo
pv file | processor_application
A medida que el pv pasa, es stdin directamente a su stdout, no necesita usar cat.
Editar Como su programa ya se está ejecutando, busque el PID del
cat
proceso y luego mire el contenido de/proc/<PID>/io
que le dirá cuántos bytes ha escrito: wchar.
fuente
¡Absolutamente! Pipe Viewer hace exactamente eso. Simplemente insértelo en su tubería:
Puede optimizar lejos
cat
en el ejemplo anterior:Lo cual tiene la ventaja de proporcionar un indicador de progreso real, ya que pv puede determinar el tamaño de la entrada directamente. Si utiliza pv en el medio de una tubería, debe proporcionar el tamaño del archivo usted mismo para obtener un progreso preciso:
Consulte el sitio web para obtener más opciones para personalizar pv.
fuente
pv
cuando está disponible :-)pv
en una tubería usandomkfifo
ygdb
(cuatro syscalls con gdb'sp
).Si el proceso ya se está ejecutando, lsof tiene una
size/offset
columna que puede serle útil: busque el PID del proceso cat que desea inspeccionar y luegolsof -o -p [PID]
.Si el proceso aún no se está ejecutando,
pv
como otros sugirieron es una buena opción (suponiendo que su sistema tenga esa utilidad).fuente
-o
no funciona en su sistema, creo que está bastante jodido con respecto al usolsof
: - / (Supongo que está ejecutando lsof como el usuario que inició elcat
proceso, o como root?)