sub compile { my %child_pids; foreach $plat (0 .. $#plat_list) { my $pid = fork; # Didn't check the undef condition for child if ($plat_list[$plat] eq "SOLSPARC") { print "\nStarted Solaris build \n"; if ($pid == 0) { print "Inside Child Process \n\n"; exec ( "${ROOT}/${REM_EXEC} -t 1200 -c \"make LANG=en_US distclean \" -b ${ROOT} -l Agent. $plat_list[$plat]" ) or die "exec failed"; } elsif ($pid > 0) { $child_pids{"SOLSPARC"} = $pid; } } else { print "\nStarted build for other platforms \n"; if ($pid == 0) { print "Inside Child Process \n\n"; exec ( "${ROOT}/${REM_EXEC} -t 1200 -c \"make LANG=en_GB clean \" -b ${ROOT} -l Agent. $plat_list[$plat]" ) or die "exec failed"; } elsif ($pid > 0) { $child_pids{"$plat_list[$plat]"} = $pid; } } } my %rev_child_pids = reverse %child_pids; while ((my $kid = waitpid -1, WNOHANG) > 0) { if ($rev_child_pids{$kid} eq "SOLSPARC") { print "\nChild process completed for SOLARIS platform $rev_child_pids{$kid} \n"; print "Run some other command here \n"; } else { print "\nChild process completed for other platform $rev_child_pids{$kid} \n"; print "No more commands to run \n"; } } }