Existe alguma ferramenta estabelecida onde o pipe vaza para o disco em vez de bloquear o processo upstream?
Por exemplo, em um pipeline tradicional A | B, obtemos o seguinte comportamento quando B não lê do stdin:
- A emite saída até que o stdout fique cheio
- Então A é bloqueado até que B leia de stdin
Eu gostaria do seguinte comportamento:
- A emite uma saída até que seu buffer stdout fique cheio
- Outras saídas de A são gravadas em um arquivo de cache no disco, de modo que A não é bloqueado
- Quando B ingere dados do stdin, novos dados do arquivo de cache no disco são lidos (FIFO) no buffer
Existe alguma ferramenta existente que faça isso?
Obrigado!
Com o
mbuffer
utilitário:Isso faria com que
mbuffer
fosse usado um arquivo mapeado na memória (a-t
opção) para armazenar em buffer a quantidade potencialmente massiva de dados queproducer
sai seconsumer
não for possível lê-los rápido o suficiente. O tamanho do arquivo mapeado na memória seria limitado a 10 GB (se esse arquivo ficar cheio,mbuffer
ele bloquearia como de costume).