I'm forking several child processes at once, and then "processing" them individually as they complete. I'd like for the "processing" subroutine to have some information about the child, in order to identify the child, but I don't know how to do this without globalizing my entire data structure
My first thought was to pass arguments to the reapChildren subroutine, but I get a "Not a subroutine reference"error
I then, tried: sub {reapChildren($app)}, but reapChildren was only getting the LAST app in the list.
Any help is greatly appreciated...even if there's a totally better way to do this. Thanks. Michele
Here's a snippet
:use POSIX qw(:sys_wait_h :errno_h :signal_h); use strict; sub runChildren { my $obj = $_[0]; my $runlist = $obj->{'runlist'}; foreach my $app (@$runlist) { my $pid; if ($pid = fork) { $SIG{CHLD} = \&reapChildren; } else { my $appargs = $app->{'args'}; exec(@$appargs); } } } sub reapChildren { my $pid; $pid = waitpid(-1,&WNOHANG); if ($pid == -1 || WIFEXITED($?)) { processApplication; } $SIG{CHLD} = \&reapChildren; } sub processApplication { #Need to know which application needs processing }
In reply to Passing args to a subroutine reference by mjoyce
| For: | Use: | ||
| & | & | ||
| < | < | ||
| > | > | ||
| [ | [ | ||
| ] | ] |