Como pv
é apenas uma ferramenta de monitoramento, acho que é um programa de thread único que usa IO síncrono. Se a entrada e a saída estiverem sendo executadas em taxas diferentes, ela preencherá e esvaziará seu buffer para evitar a aceleração, mas se um dos canais estiver completamente paralisado (no seu caso, split
não aceitará entrada), a segunda instância pv
irá parar na chamada write
também. Então, gzip
tentará produzir mais dados, estourar o buffer de tubulação e também parar, e assim por diante até que todo o pipeline pare.
Tente usar buffer
em vez de pv
e veja se isso ajuda. buffer
gera dois processos (um para entrada e outro para saída) e deve manter o pipeline funcionando mesmo se a saída estiver completamente paralisada.