in reply to Wait Question
use Parallel::ForkManager; # Begin ForkManager my $_max_procs = 5; my $_pm = new Parallel::ForkManager($_max_procs); # Log at process fork $_pm ->run_on_start( sub { my ($pid, $host) = @_; print "Forking process PID: $pid\n"; } ); # Log at process copmletion $_pm ->run_on_finish( sub { my ($pid, $exit_code, $func) = @_; print "Finishing up process PID: $pid\n"; } ); # This run_on_wait is currently set to print every 5 sec # It can easily be modified to write to a socket every X sec $_pm->run_on_wait( sub { print "Waiting for children to finish.\n" }, 5.0 ); foreach my $cmd (@commands) { # Fork off the children my $pid = $_pm->start($cmd) and next; # run subroutine to wait on here # Closing the forked process $_pm->finish; } # Ensure all children have finished $_pm->wait_all_children; exit(1);
|
|---|