use strict; use warnings; use Parallel::ForkManager; my @runArray = ("test1.sh", "test2.sh", "test3.sh", "test4.sh", "test5.sh"); my ($pid, $exitCode, $ident); my $forkMgr = Parallel::ForkManager->new(3); $forkMgr->run_on_start( sub { ($pid, $ident) = @_; print "Started ==> $ident\n"; } ); $forkMgr->run_on_finish( sub { ($pid, $exitCode, $ident) = @_; print "Ended ==> $ident\n"; } ); while (1) { for my $runCommand (@runArray) { $forkMgr->start($runCommand) and next; system("/usr/localcw/opt/patrol/nagios/libexec/$runCommand"); $forkMgr->finish; } $forkMgr->wait_all_children; sleep 10; } exit;