Thread Systemaufruf, kehrt nicht zurück (15 answers)
Opened by theresa at 2008-03-03 15:45

theresa
 2008-03-26 14:56
#107504 #107504
User since
2007-07-17
90 Artikel
BenutzerIn
[default_avatar]
Ok, ich drehe gleich durch.

Habe folgenden Abschnitt jeweils mit system, qx und `` ausführen lassen, unten die Ergebnisse.
Alarm habe ich erstmal übertriebene 15 Sekunden gegeben, um sicherzustellen, dass keine Probleme auftauchen weil der Befehl nicht vollständig ausgeführt werden konnte.

Code: (dl )
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
 eval {
local $SIG{ALRM} = sub { die "alarm\n" }; # NB \n required
alarm 15;
# $return = system($text);
# $return = qx($text);
$return = `$text 2>&1`;
alarm 0;
};
die if $@ && $@ ne "alarm\n"; # propagate errors
if ($@) {
# timed out
print "\n\$\@ = $@\ntimeout, return: $return\n";
}
else {
# didn't
print "\nreturn: $return\n";
}


(Die richtige Eingabe ist der Fall, wenn das Programm nicht zurückkommt, bei falschen Daten kommt es sofort zurück mit einer Fehlermeldung.)

-system/richtige Eingabe: timeout (wie erwartet), return leer (wie erwartet), also alles o.k.
-system/falsche Eingabe: kein timeout, fehlermeldung wird auf der konsole ausgegeben und Fehlerkode in $return gespeichert.
:( Häufiger aber timeout (?), selbe fehlermeldung auf der konsole, $return leer.

-qx/richtige Eingabe: kein timeout, bleibt hängen. Scheint also auf alarm nicht zu reagieren.
-qx/falsche Eingabe: kein timeout, und speichert die ausgabe in $return sowie erwartet, also hier auch alles o.k.

-``/richtige Eingabe: kein timeout, bleibt hängen. Scheint also auf alarm nicht zu reagieren.
-``/falsche Eingabe: timeout, und speichert nichts in $return.

View full thread Systemaufruf, kehrt nicht zurück