larsen has asked for the wisdom of the Perl Monks concerning the following question:
I need to write an application that forks multiple childs, maintaining for
each child a communication channel, so that the childs can send data back to
the parent (output and informations about their state).
Reading about interprocess communication, it seemed to me that pipes could solve my problem. Here what I naively wrote :)
Reading about interprocess communication, it seemed to me that pipes could solve my problem. Here what I naively wrote :)
As you can see, I maintain a hash for each child, containing a file handler that is used by the parent to read child's output. But this does not work, because the while-block that read child's output is blocking. This way doesn't seem to be worth further exploring. How could I realize what I've described at the beginning of this node?#!/usr/bin/perl use strict; use FileHandle; use Data::Dumper; my $childs = { A => { pid => undef, handler => undef, blabla => () }, B => { pid => undef, handler => undef, blabla => () }, C => { pid => undef, handler => undef, blabla => () } }; foreach my $name ( keys %{$childs} ) { $childs->{ $name }->{ handler } = new FileHandle; $childs->{ $name }->{ pid } = $childs->{ $name }->{ handler }->ope +n( "-|" ); if ($childs->{ $name }->{ pid }) { # The child's talking... while(my $line = $childs->{ $name }->{ handler }->getline()) { push @{$childs->{ $name }->{ blabla }}, $line; } } else { # Childs' STDOUTs are read by the parent print "Hi! I'm $name and I'm good!"; exit; } } print Dumper( $childs );
|
---|
Replies are listed 'Best First'. | |
---|---|
Re (tilly) 1: Coping with a large family (interprocess communication)
by tilly (Archbishop) on Apr 23, 2001 at 15:03 UTC | |
Re: Coping with a large family (interprocess communication)
by AgentM (Curate) on Apr 23, 2001 at 18:18 UTC | |
Re: Coping with a large family (interprocess communication)
by Rhandom (Curate) on Apr 23, 2001 at 18:52 UTC |
Back to
Seekers of Perl Wisdom