Thread Frage zu sysread (18 answers)
Opened by bianca at 2013-10-01 09:18

martin.g
 2013-10-02 12:25
#170902 #170902
User since
2013-09-20
40 Artikel
BenutzerIn
[default_avatar]
Ich hatte mich mit Z.18 und Z.19 auf Dein geändertes Listing inklusive blocking(0) bezogen. Aber bleiben wir der Übersichtlichkeit lieber bei Z.16/17.

Also um das nochmal zusammenzufassen, dass wir nicht aneinander vorbeireden:

Das hier funktioniert, liest aber nicht alles: sysread $out,$ausgabe,4096;
Nach dem Aufruf steht in $ausgabe ein Teil der Ausgabe drin.

Was hier passiert, weißt Du nicht genau, das Perl Skript hängt irgendwann und die Folgeanweisungen werden nicht mehr ausgeführt. $ausgabe .= $puffer while (sysread $out,$puffer,4096);

Das Zurücksetzen des Systems verstehe ich nicht. Meinst Du das Perl Skript abzubrechen? Oder hängt sich durch das Perl Skript der andere Service auf?

Ich würde etwas in der Form versuchen, um erstmal herauszufinden, wie oft durchlaufen wird und ob irgendwelche Auffälligkeiten dabei sind.

Code (perl): (dl )
1
2
3
4
5
6
7
8
for( my $i = 1; $i <= 10; $i++ ) {
  last unless $out;
  print "Calling sysread; ";
  my $bytes = sysread($out, $buffer, 4096);
  print "Try #$i: $bytes Bytes read.\n";
  last unless $bytes;
  print "$buffer\n\n";
}

Vermutlich wird er dann tatsächlich irgendwann nach "calling sysread" hängen. Evtl. sagt aber der vorherige buffer irgendwas aus. Evtl. wird auch das Filehandle ungültig und sysread merkt das nicht. Dann sollte die erste last Anweisung für Abbruch sorgen.

Nachtrag: Deine Ergänzung im Beitrag bzgl. Strg+C lässt darauf schließen, dass Du tatsächlich das Remote System abschießt. Das ist natürlich richtig blöd :-) Und bedeutet wohl, dass es zu irgendeiner Deadlock Situation kommt. Wieso das dann aber dreimal funktioniert, ist mir schleierhaft.

Nachtrag2: Ich habe es begriffen. Du versuchst, Dich irgendwo anzumelden, schaffst es aber nicht, weil Dein Skript nicht funktioniert. Und das System, wo Du Dich anmelden willst, sperrt den Zugang dann. Die Frage, die sich stellt: Das ist eine lokale Anwendung auf Kommadozeilenebene, richtig? Zwei falsche Versuche sind okay. Wenn Du Dich von Hand nach dem zweiten Mal einmal korrekt einloggst - hast Du dann wieder drei Versuche?
Last edited: 2013-10-02 12:34:38 +0200 (CEST)

View full thread Frage zu sysread