in reply to
Help with multiple forks
Looking at your pseudocode, perhaps Forks::Super is something you could use here:
sub OnTaskEnd {
my ($forksuperjob, $jobid) = @_;
if (ref($forksuperjob) ne 'Forks::Super::Job') {
die("OnTaskEnd called with argument of type [" . ref($forksupe
+rjob) . "] instead of expected Forks::Super::Job");
}
print("TaskEnd: JobID [$jobid] Job pid [" . $forksuperjob->{real_p
+id} . "] starttime [" . int($forksuperjob->{start}) . "] name [" . $f
+orksuperjob->{name} . "] status [" . $forksuperjob->{status} . "]\n")
+;
# Do other stuff here, like starting new jobs to process files
$forksuperjob->dispose;
}
foreach my $val1 (@array1) {
my $forkresult = Forks::Super::fork {
dir => 'dir_here',
cmd => 'your_command_here.pl',
name => 'unique_name_of_task',
callback => {
start => \&OnTaskStart,
finish => \&OnTaskEnd
},
};
}
print("Waiting for child jobs to finish\n");
my $jobs_waited = waitall();
print("[$jobs_waited] jobs were scheduled/running and have now finishe
+d\n");
Alternatively, instead of executing external programs with the
cmd-option, you could use
sub to fork subroutines instead.