Anzeige:
Ergebnis 1 bis 2 von 2

Thema: PERL: exit(), wieso existier PID weiter

  1. #1
    Registrierter Benutzer
    Registriert seit
    09.06.2009
    Beiträge
    37

    PERL: exit(), wieso existier PID weiter

    Hallo,

    ich habe folgendes Skript geschrieben, um zu checken, ob ein Prozess noch aktiv ist.
    Trotz des exit()-Befehl, existiert der Prozess anscheinend weiter.
    Wiseo. Kann mir jemand sagen, was ich falsch mache bzw. wie ich das Ende des Child Prozesses überwachen kann, ohne dass das Hauptprogramm warten muss?

    Beste Dank!

    Hier
    das Skript und die dazugehörige Ausgabe:

    Skript:
    Code:
    print "Start..\n";
    $pid=fork();
    if ($pid) {
    	print "Elternprozess\n";
    }
    else{
    	print "ChildProzess..\n";
    	sleep(15);
    	print "kurz vor Child-Ende\n";
    	exit();
    }
    
    if ($pid) {
    	print "Im if-Bereich\n";
    	do{
    		$check=kill 0, $pid;
    		print "Check: $check\n";		
    		$count++;
    		sleep(1);
    	}until((!($check)) or ($count > 25));
    }

    AUSGABE:

    Start..
    Elternprozess
    Im if-Bereich
    Check: 1
    ChildProzess..
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    kurz vor Child-Ende
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1
    Check: 1

  2. #2
    Registrierter Benutzer Avatar von jeebee
    Registriert seit
    01.01.2005
    Ort
    Bern || Zürich
    Beiträge
    540
    schau dir mal waitpid an (perldoc -f waitpid). Damit funktionierts bei mir wie gewünscht (Linux).

    Code:
    #!/usr/bin/env perl
    
    use POSIX ":sys_wait_h";
    
    print "Start..\n";
    $pid=fork();
    if ($pid) {
    	print "Elternprozess\n";
    }
    else{
    	print "ChildProzess..\n";
    	sleep(15);
    	print "kurz vor Child-Ende\n";
    	exit();
    }
    
    if ($pid) {
    	print "Im if-Bereich\n";
    	do{
    		$check = waitpid($pid, WNOHANG);
    		print "Check: $check\n";		
    		$count++;
    		sleep(1);
    	}until((($check)) or ($count > 25));
    }
    my very own 128 bit integer
    C4 D3 B8 A8 9E A0 C6 EC 7D EC A8 15 28 D1 92 58
    more information

Stichworte

Lesezeichen

Berechtigungen

  • Neue Themen erstellen: Nein
  • Themen beantworten: Nein
  • Anhänge hochladen: Nein
  • Beiträge bearbeiten: Nein
  •