PDA

Archiv verlassen und diese Seite im Standarddesign anzeigen : Fork mit Perl



zielscheibe
20.02.2006, 16:35
Hallo NG!

Hab da ein kleines Problem, welches ich nicht verstehe.
Ich brauch in einem Programm mehrere Forks. Ich will
aber, während die Kinder irgendetwas tun, mit dem Vater im
"normalen" Programm weiter machen. Ein stark verkürzter
Ausschnitt aus dem Programm (normalerweise haben die
Variablen manierliche Namen und "use strict" wird benutzt):




#!/usr/bin/perl -w


print "Start von $$\n";
oben();
print "Ende von $$\n";


sub oben
{
for (my $i = 1; $i <= 4 ; $i++)
{
print "$$ In der schleife\n";
unten();
}
}



sub unten
{
my $pid = open my $self, "|-";

if ($pid == 0)
{
print "Hier Kind: $$\n";
sleep (10);
exit 0;
}

elsif ($pid > 0)
{
print "Hier Vater: $$\n";
return;
}
}



Warum springt der Vater nicht direkt zurück und
schreibt "Ende von" sondern wartet mit jedem Kind die 10 Sekuden :think:

Wolfgang
20.02.2006, 17:13
Hallo

So geht das nicht.
Du speicherst in deinem Script den Rückgabewert der Funktion
open , statt der PID in $pid.
Warum benutzt du nicht die Funktion fork?



if(! defined($pid= fork()){
die "Error on Fork\n";
}
elsif($pid==0){
print "Child go now sleep\n";
sleep(10);
print "Child terminate";
exit;
}
else{
print "Here the parent prozess\n";
# do what ever you want
}


Gruß Wolfgang

zielscheibe
21.02.2006, 10:51
So geht das nicht.
Warum benutzt du nicht die Funktion fork?



if(! defined($pid= fork()){


Gruß Wolfgang

Hallo Wolfgang!

Prima - so funktioniert das :D
(Da fehlte nur noch eine schließende Klammer für das IF.)
Ich hatte das mit dem OPEN aus dem "Programmieren mit
Perl" Buch vom O`Reilly Verlag. Da stand das so im Kapitel
Interprozeßkommunikation drin. Ich hätte besser direkt nach
fork schauen sollen. Vielen Dank für die schnelle Hilfe.