my %child; for my $cmd ( "command1", "command2", "command3" ) { $child{system(1,$cmd)}= $cmd; } while( %child ) { my $cmd= delete $child{wait()}; warn "$cmd failed: $?\n" if 0 != $?; }