#!/usr/bin/perl use warnings; use strict; my @commands = ( 'sleep 3 && find /usr/share/doc', 'sleep 4 && find /opt', 'sleep 5 && df' ); my @pids; for my $i (0 .. $#commands) { if (my $pid = fork) { push @pids, $pid; } elsif (defined $pid) { 0 == system "$commands[$i] > $i.o" or die "Can't run $commands[$i]"; exit } else { die "Can't fork"; } } for my $i (0 .. $#commands) { print "=== $commands[$i] ===\n"; waitpid $pids[$i], 0; open my $fh, '<', "$i.o" or die "$i.o: $!"; print while <$fh>; unlink "$i.o"; }