Fork mit Perl

Z

zielscheibe

Mitglied
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):


Code:
#!/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:
 
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?

Code:
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
 
Wolfgang_1 schrieb:
So geht das nicht.
Warum benutzt du nicht die Funktion fork?

Code:
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.
 

Ähnliche Themen

[Perl] Perl OO Methodenaufruf in anderem Objekt

Server und Client für TCP und UDP

Perl serielle Schnittstelle

NagiosGrapher 1.7.1 funktioniert nicht

HP PSC 2175 - CUPS druckt nicht

Zurück
Oben