2011-12-18 7 views
19

Dada una línea de comandos de bash de la formaAñadir una gran memoria intermedia a una tubería entre dos comandos

commandA | commandB 

Quiero añadir un buffer de tamaño ~ 1 MB que se encuentra entre commandA y commandB. que sería de esperar a ser capaz de hacer esto con algo de la forma

commandA | BUFFER | commandB 

pero ¿cuál es el comando a utilizar para BUFFER?

Observación: Quiero hacer esto para desacoplar los dos comandos y hacerlos paralelizar mejor. El problema es que commandB procesa datos en trozos grandes, lo que significa que actualmente los bloques commandA hasta commandB se realizan con un trozo. Así que todo funciona secuencialmente :-(

Respuesta

20

BUFFER se llama memoria intermedia. (1 hombre tampón, tal vez después de búfer apt-get install)

+0

Genial, no tenía idea, +1 ;-) –

+0

¿Cuáles son las opciones que uno debe pasar al búfer para obtener un, por ejemplo. 1 GB de tamaño de búfer? Parece haber muchas opciones para configurar el tamaño del fragmento, el número de fragmentos y lo que sea, pero no tengo claro cuáles usar para obtener un buffer simple de un tamaño determinado. –

+1

'-m size' es para el total. Si necesita un control más detallado use '-s blocksize -b blocks' juntos. –

5

Puede utilizar

  • memoria intermedia (mencionado)
  • mbuffer (funciona en Solaris también, posiblemente, otros Unix)

Ej

process1 | mbuffer -m 1024M | process2 

usar un tampón 1G

+0

mbuffer parece mucho mejor que el buffer ya que el buffer es (de acuerdo con la página de manual y mis experimentos) limitado a 1GB. – phihag

1

otra posibilidad es utilizar una tubería con nombre y ejecutar en paralelo:

mkfifo myfifo 
commandB < myfifo & 
commandA > myfifo 
rm myfifo 
+0

Eso almacena alrededor de 64 KB solamente, no es grande. –

7

existe otra herramienta, pv - Visor de tubería:

process1 | pv -pterbTCB 1G | process2 
  • B especifica el tamaño del búfer, aquí 1 Gigibyte
  • C desactiva splice, que se requiere para B
  • T muestra el nivel de tampón
  • pterb son los interruptores de pantalla predeterminada necesarios debido a la presencia de T

pv puede estar disponible en sistemas en los que mbuffer/buffer no es en los repositorios oficiales (como arch linux).

Cuestiones relacionadas