Travis Thornhill wrote:
> I thought I understood this but maybe I don't. 

Have you read the perlipc doc:

perldoc perlipc

It has examples on how to use fork.


> When perl forks it creates an exact copy of itself with open files, same
> variables, hashes, arrays, etc.
> 
> But when a variable in one changes, do they all change?

fork() creates a separate process which is a copy of the parent process but
any changes in the child will not effect the parent.


> What's wrong with how I'm trying to use the $children variable to track
> whether or not I still have processes running?

Use waitpid to track the children:

perldoc -f waitpid


> #!/usr/local/bin/perl
> 
> use strict;
> use warnings;
> 
> my $pid;
> my $children = 0;
> 
> my @args = (
>     "arg1",
>     "arg2",
>     "arg3",
>     "arg4",
> );
> 
> foreach my $arg ( @args ) {
>     if ( $pid = fork() ) {
>         #parent
>         #do nothing yet
>     } else {

You should verify that fork worked:

          die "Cannot fork: $!" unless defined $pid;


>         #child
>         $children++;
>         system("my_command -a $arg");

system() forks another process to run 'my_command'.  You should just use exec
here:

          exec 'my_command', '-a', $arg or die "Cannot exec 'my_command' $!";


>         $children--;
>         exit;
>     }
> } # end foreach
> 
> # didn't let children fall through, so this is in the parent process
> # this is where I do lots of stuff waiting for $children to equal zero
> 
> while ( $children ) {
>     # gather some data from "ps" and parsing log files, etc...
> }


John
-- 
use Perl;
program
fulfillment

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]
<http://learn.perl.org/> <http://learn.perl.org/first-response>


Reply via email to