Good morning, afternoon, night,

        I have been trying to work on a script that does forking.  But
the script dies in the fork.  Here is what I have:

I push some information about a server into an array.

<snip>
use POSIX "sys_wait_h";
my $child_limit = 1;
my $child_pids = 0;
$SIG{CHLD} = \&CHILD_COUNT($child_limit);


 push @server_list, $href;

              FORK:
             {
                while ( $#server_list > -1 ) {
                     next if $child_pids > $child_limit;
                     my $server_todo = pop @server_list;
                     if (my $pid = fork) {
                             # sleep 1;  # failing due to bad
subroutine? 
                             #do the parent
                             $child_pids++;
                             next;
                     }
                     elsif (defined $pid) {
                             # ok now the child.
                             do_stuff($server_todo); #subroutine
                             exit;
                     }
                     elsif ($! =~ /No more process/) {
                             print " No more process ...sleeping\n";
                             sleep 5;
                             redo FORK;
                     }
                     else {
                     die " Can't fork: $! \n";
                     }
                }       
             }

sub CHILD_COUNT {
        my $child_limit = @_;
        my $child;
        $child = waitpid(-1, WNOHANG);
        while ( $child > 0 && ( $child_pids > 0)) {
                $child_pids-- if ( $child_pids > 0);
                $child = waitpid(-1,WNOHANG);
        }
}



</snip>


  I get the error:
Not a subroutine reference at serverbackup.pl line 65.

Line 65 is the next if statement.

  I am at a loss here.  It seems that the more I read about this the
more I get confused.

Can anyone give me a hand with this?  Or a push in the right direction? 
It would be much appreciated.

Thanks
--chad

-- 
To unsubscribe, e-mail: [EMAIL PROTECTED]
For additional commands, e-mail: [EMAIL PROTECTED]

Reply via email to