#!/usr/bin/perl use strict; # https://perlmonks.org/?node_id=11150996 use warnings; my @testLists = 1 .. 7; # FAKE for testing my $opts = 'opts'; # FAKE for testing my %pids; # NOTE changed to hash because children finish in any order foreach my $list (@testLists) { while( keys %pids >= 2 ) { delete $pids{ +wait }; } if( my $pid = fork ) { $pids{ $pid }++; } elsif( defined $pid ) { my $status += regressions($opts, $list); exit; } else { die "fork failed $!"; } } foreach my $pid ( keys %pids ) { waitpid($pid, 0); } sub regressions # FIXME for testing { print time, " pid $$ starting on (@_)\n"; sleep 1 + int rand 3; print time, " pid $$ ending on (@_)\n"; }
Sample Output:
1678877305 pid 65651 starting on (opts 1) 1678877305 pid 65652 starting on (opts 2) 1678877307 pid 65651 ending on (opts 1) 1678877307 pid 65653 starting on (opts 3) 1678877308 pid 65652 ending on (opts 2) 1678877308 pid 65653 ending on (opts 3) 1678877308 pid 65654 starting on (opts 4) 1678877308 pid 65655 starting on (opts 5) 1678877310 pid 65655 ending on (opts 5) 1678877310 pid 65656 starting on (opts 6) 1678877311 pid 65654 ending on (opts 4) 1678877311 pid 65657 starting on (opts 7) 1678877312 pid 65656 ending on (opts 6) 1678877313 pid 65657 ending on (opts 7)
In reply to Re: running a function for different list parallely using fork
by tybalt89
in thread running a function for different list parallely using fork
by noviceuser
For: | Use: | ||
& | & | ||
< | < | ||
> | > | ||
[ | [ | ||
] | ] |