#!/usr/bin/perl -w use strict; use IPC::Run qw[ start pump finish timeout ]; use constant true => (1==1); use constant false => (1==0); my $N_instances = shift; my (@in,@out,@err,@handle,@finished); my $done; foreach my $i ( 1 .. $N_instances) { $finished[$i]= false; $handle[$i] = start \@ARGV, \$in[$i], \$out[$i], \$err[$i] ; } while (!$done) { $done = true; foreach my $i ( 1 .. $N_instances) { $done &= $finished[$i]; next if ($finished[$i]); if ($handle[$i]->pumpable) { $handle[$i]->pump_nb; printf "O[%i]: %s",$i,$out[$i] if ($out[$i]); printf "E[%i]: %s",$i,$err[$i] if ($err[$i]); $out[$i] = ""; $err[$i] = ""; } else { $finished[$i] = true; $handle[$i]->finish; } } }