SPUG: Forked Children talking back to the parent?

Richard Wood wildwood_players at yahoo.com
Wed Jan 17 10:28:12 CST 2001


John, 

I do something very similar to this, and I still have
a dilemma with it.  What I do is to find out how many
processes I need to fork, then I set up bidirectional
socket-pairs to use between the parent and children,
then I fork the children.  The parent then goes into a
loop of sending messages to every child followed by a
loop of waiting for a response from every child prior
to going on to the next message.  The parent is in an
outer loop of looking for and processing scripts which
may or may not have commands for every child process. 
If a child process is not supposed to receive a
command, I just send it a DUMMY command which it echos
back.

The children are in a loop waiting for messages from
the parent upon which they take action and report back
to the parent.

The part I haven't worked out is what to do if a child
hangs.  Hopefully, other responses to your email will
give me some ideas on that.

This is related to your situation since you add
processes along the way.  Well, maybe this will help
and maybe not.

####################################################
# estab_socket();
####################################################

sub estab_socket {
    my $site = shift;
    my $pSoxR = shift;
    my $cSoxR = shift;

    my $Parent = "Parent"."$site";
    my $Child = "Child"."$site";
    
    socketpair($Child, $Parent, AF_UNIX, SOCK_STREAM, 

                PF_UNSPEC) 
        or die "socketpair: $!";

    $Parent->autoflush(1);
    $Child->autoflush(1);

    $$pSoxR[$site] = \*$Parent;
    $$cSoxR[$site] = \*$Child;
}

Regards,

Rich Wood



--- John Cokos <jcokos at ccs.net> wrote:
> Working on a long running perl script, that I think
> would be better suited to using fork() than running
> on it's own.
> 
> Basically, the pseudocode for it is something like
> this:
> 
> 
> 
>
code:------------------------------------------------------------------------------my
> @to_do_list
> 
> push @to_do_list, $something;
> 
> foreach my $item ( @to_do_list ) {
> 
>     .. do some work.
>     if ( I find something else to do)  {
>        push @to_do_list, $this_new_thing;
>     }
> 
> }
>
------------------------------------------------------------------------------
> 
> 
> So, you can see that it's an array that can be added
> to in mid-stream, and continually grows. Depending
> on the amount of things
> "found to do" in the inside loop, it can take hours
> and hours to run, as that array grows larger.
> 
> What I'm wanting to do, is fork off 10 child
> processes, and have each of them doing the same
> loop, each aware of the master array's
> contents, and each able to push things onto it, so
> that the other children, when they're in the loop
> see the new todo items...
> 
> Can the children intercommunicate?
> 
> If not, can they at least return a value back to the
> parent?
> In this case, we could have it fork 10, give them a
> task, get back the new todo items found, and die.
> Then, fork 10 new kids, etc
> ....
> 
> Thanks, John
> ========================================
>   John Cokos, President / CEO: iWeb Inc.
>   http://www.iwebsys.com
>   jcokos at ccs.net
> ========================================
> 
> 
> 
>  - - - - - - - - - - - - - - - - - - - - - - - - - -
> - - - - - - - - - - -
>      POST TO: spug-list at pm.org       PROBLEMS:
> owner-spug-list at pm.org
>       Subscriptions; Email to majordomo at pm.org: 
> ACTION  LIST  EMAIL
>   Replace ACTION by subscribe or unsubscribe, EMAIL
> by your Email-address
>  For daily traffic, use spug-list for LIST ;  for
> weekly, spug-list-digest
>   Seattle Perl Users Group (SPUG) Home Page:
> http://www.halcyon.com/spug/
> 
> 


=====
Richard O. Wood
Wildwood IT Consultants, Inc.
wildwood_players at yahoo.com
206.605.2539
http://resumes.dice.com/richardowood

__________________________________________________
Do You Yahoo!?
Get email at your own domain with Yahoo! Mail. 
http://personal.mail.yahoo.com/

 - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - - -
     POST TO: spug-list at pm.org       PROBLEMS: owner-spug-list at pm.org
      Subscriptions; Email to majordomo at pm.org:  ACTION  LIST  EMAIL
  Replace ACTION by subscribe or unsubscribe, EMAIL by your Email-address
 For daily traffic, use spug-list for LIST ;  for weekly, spug-list-digest
  Seattle Perl Users Group (SPUG) Home Page: http://www.halcyon.com/spug/





More information about the spug-list mailing list