Il dubbio che mi viene è che, se il programma genera tanto output e tu lo vuoi leggere solo alla fine, rapidamente si riempie il buffer della pipe, e il programma si blocca attendendo che questo venga svuotato... prova a leggere l'output un po' alla volta (in un ciclo) invece che tutto alla fine.