Thread Perl - Mehrere Child-Prozesse starten (9 answers)
Opened by Digioso at 2006-07-06 14:43

Digioso
 2006-07-07 11:16
#67895 #67895
User since
2006-07-06
8 Artikel
BenutzerIn
[default_avatar]
Es gibt zu jedem Zeitpunkt nur ein Kind, welches auf den READER hört. Folglich kann auch nur ein Kind was durch die Pipe empfangen.
Durch exec wird das Kind komplett überschrieben und führt nur noch das Kommando aus. Es hört also nicht mehr den READER ab.

Code: (dl )
1
2
3
4
5
6
if ($zahl < 4)
{
$zahl++; # increase number of children
$pid = fork(); # a new child is born. yay :)
print $pid."\n";
}


Sobald es drei aktive Kinder gibt, wird das vierte erzeugt und danach steht $zahl auf 4.
Dem vierten Kind wird dann mittels pipe der Befehl zugesendet.
Da $zahl == 4, landet er jetzt in der Schleife.

Code: (dl )
1
2
3
while(! wait()) # *waiting*
{
}


Dort wird gewartet, bis sich irgendeines der Kinder beendet hat.
Anschließend wird $zahl wieder um 1 verringert, da ja nur noch drei Kinder laufen.
Er holt sich das nächste Kommando aus der Textdatei und erstellt wieder ein neues Child.
Das Child hört auf den READER und das Hauptprgramm schickt was durch den WRITER.
Das Child ersetzt sich wieder selbst.
usw...

Woran ich gedacht habe, war, dass das Hauptprogramm vielleicht zu schnell sendet und ein neues Kind erstellt, bevor das andere sich seinen Befehl abgeholt hat.
Das wäre dann ja genau das, was du angesprochen hast.
Aus dem Grund habe ich im Hauptprogramm mal ein sleep 1 eingebaut, allerdings hat das auch nichts gebracht.\n\n

<!--EDIT|Digioso|1152256948-->

View full thread Perl - Mehrere Child-Prozesse starten