Самый простой способ сделать это, вероятно, fork
создать новый дочерний процесс для каждого системного вызова, а затем дождаться его завершения. Вот упрощенный пример:
my @commands = ( "sleep 5 && echo step 1 done",
"sleep 3 && echo step 2 done",
"sleep 7 && echo step 3 done" );
my @pids;
foreach my $cmd( @commands ) {
my $pid = fork;
if ( $pid ) {
# parent process
push @pids, $pid;
next;
}
# now we're in the child
system( $cmd );
exit; # terminate the child
}
wait for @pids; # wait for each child to terminate
print "all done.\n";