Re: OT - Pipe entre tres procesos
On Sáb 05 Dic 2009 10:51:02 d.sastre.medina@gmail.com escribió:
> On Fri, Dec 04, 2009 at 02:17:50PM -0800, Rodrigo Gallardo wrote:
> > On Fri, Dec 04, 2009 at 04:08:15PM -0300, Enzo Cappa wrote:
> > > ¡Hola!
> > >
> > > ¿Alguien sabe si es posible construir un pipe entre tres procesos, un
> > > productor y dos consumidores?
> > > Es decir, por ej., hacer un hecho de uno y que eso lo lean otro dos
> > > procesos simultáneamente.
> > > Si es posible, por favor ayudenme a descubrir como.
> >
> > No, no se puede.
> >
> > En principio podrías pasarle el descriptor de archivo del lado de
> > lectura a cualquier número de procesos, pero cada byte que se escriba
> > en el pipe puede ser leido por cualquiera de ellos y no hay ninguna
> > garantía de cual va a ganar. Cualquier resultado desde "repartir un
> > byte a cada lector en orden" hasta "un sólo lector recibe todo y los
> > demás nada" es perfectamente válido.
> >
> > Probablemente lo que tendrás que hacer es escribir un proceso
> > multiplexor, que lea del pipe y lo reparta con el criterio que desees
> > a los demás.
>
> Hola,
>
> Por lo que he entendido, quieres hacer algo como (de la info de
> coreutils):
>
> * tee invocation:: Redirect output to multiple files or
> * processes.
>
> wget -O - http://example.com/dvd.iso \
>
> | tee >(sha1sum > dvd.sha1) \
> |
> >(md5sum > dvd.md5) \
> >
> > dvd.iso
>
> tardir=your-pkg-M.N
> tar chof - "$tardir" \
>
> | tee >(gzip -9 -c > your-pkg-M.N.tar.gz) \
> | bzip2 -9 -c > your-pkg-M.N.tar.bz2
>
> ¿Es algo como esto lo que quieres hacer?
> Consulta info coreutils (tee) para más información.
>
> Saludos.
>
¡¡Exactamente!! Muchas gracias. El script es para grabar un script en una
cinta y mientras lo graba ir calculado una suma de verificación, de manera de
no cargar al disco rigido con dos lecturas (es un bd y está al límite).
Pronto lo pongo en practica...
¡Saludos!
Reply to: