Manuel: Traceroute -> Laufzeit-problem

Hi,

Ich habe ein "Laufzeit-problem" mit diesem Traceroute-Prozess:

open(TRACEROUTE, "-|") || exec("/usr/sbin/traceroute", "$ENV{'REMOTE_ADDR'}");
foreach $wert (<TRACEROUTE>) {
print "$wert";
}
close (TRACEROUTE);

Und zwar kommt es abundan vor, dass das Traceroute überhaupt nicht abgeschlossen wird und dann als offener Prozess den Server belastet.
Hat jemand einen Idee, wie ich den Prozess nach einer bestimmten Zeit (z.B. 60 Sekunden) automatisch terminieren kann?

Wünsche einen schönen feierabend!

Gruß
Manuel

  1. Hallo Manuel.

    Ich habe ein "Laufzeit-problem" mit diesem Traceroute-Prozess:
    Und zwar kommt es abundan vor, dass das Traceroute überhaupt nicht abgeschlossen wird und dann als offener Prozess den Server belastet.

    Du könntest die Perl-eigene Signalbehandlung nutzen:
    http://www.perldoc.com/perl5.8.4/pod/perlipc.html#Signals
    http://www.perldoc.com/perl5.8.4/pod/func/alarm.html

    In deinem Fall sollten dir $SIG{'ALRM'} und die Funktion alarm() weiterhelfen. Das könnte so ausehen:

    Am Anfang des Programmes:

    $SIG{'ALRM'} =&alarm_func;   # setzt einen Zeiger auf die Alarmfunktion
    alarm(60);                    # setzt die maximale Ausführungszeit auf 60 Sekunden

    Und die Subroutine:

    sub alarm_func {
      alarm(0);
      # Fehlermeldung ausgeben
      exit(0);                    # Script beenden
      }

    Das funktioniert natürlich nur beim Aufruf von Systemprozessen. Vielleicht hilft's ja.

    Freundschaft!
    Siechfred

    --
    Wissen bedeutet zu wissen, wo es steht.