in reply to Re^2: Learning to use fork()
in thread Learning to use fork()
Here is an example way to do what you want for educational purposes (Parallel::ForkManager is really the way to go in production code).
It is possible to loop through functions by taking references with the \& syntax:Fork failure is indicated by an undef return value by the fork function. If you want to go on with processing in a non-parallel manner when fork fails, you can just check if it's defined. Full example:sub sub1 { print 'sub1 ran' } sub sub2 { print 'sub2 ran' } my @refs = (\&sub1, \&sub2); $_->() foreach @refs;
use strict; use warnings; use POSIX ':sys_wait_h'; my @subs_to_run = ( \&sub1, \&sub2, \&sub3, \&sub4, \&sub5, ); foreach my $sub (@subs_to_run) { my $is_parent = fork; # try to fork next if $is_parent; # both child and fork failure will be false $sub->(); # we're in the child or fork failed, run the sub exit if defined $is_parent; # exit only if actually forked } 1 while waitpid(-1, WNOHANG) > 0; # wait for all children
|
|---|
| Replies are listed 'Best First'. | |
|---|---|
|
Re^4: Learning to use fork()
by ovedpo15 (Pilgrim) on Jan 15, 2019 at 10:58 UTC | |
by kroach (Pilgrim) on Jan 15, 2019 at 14:09 UTC |