Frage

Ich habe ein POE Perl-Programm Forking Kinder.

Die Kinder werden Forking tun Protokollierung und interaktive telnets in Remote-Geräte. POE verwendet STDOUT Ausgabe bis zu dem übergeordneten Prozess, um wieder zurück, aber aus irgendeinem Grunde (wird nicht oder zu irgendwelchen Dateien Bildschirm) es verloren.

Ich bin theoretisiert, dass dies, weil STDOUT irgendwo umgeleitet wird -. Ich brauche, wo festzustellen

ich verwendet habe (-t STDOUT) zu identifizieren, dass der STDOUT des Kindes ist kein TTY.

Ich habe auch die STDOUT- des Kindes zurückzusetzen, dass der Elternteil zu sein, bevor das Kind genannt wurde -. Aber diese Methode scheint Poes Event-Handler zu vermeiden und es Dumps nur die Ausgabe an die Eltern STDOUT

Q) Wie kann ich erkennen, was die aktuelle STDOUT zeigt auf, so finde ich, wo meine Daten gehen

Danke

Simon

War es hilfreich?

Lösung 3

Dies war bis auf den POE :: Filter :: Referenz StdOut Handler wird, ausgegeben durch den untergeordneten Prozess gesendet, der nicht in dem Format war es erwartet hatte.

Filter entfernt - könnte dann sehen, was es gesendet wurde, und dies ermöglichte es mir, das Problem zu beheben

.

Das Problem wurde das Kind Prozess wurde spuckt der Inhalt seiner Teilprozesse entlang der Socket-Verbindung zum StdOut Handler STDOUT zurück.

Simon

Andere Tipps

Würde Hilfe in dieser Situation fileno? Wenn ein Kind zu schließen und STDOUT Wiedereröffnung, dann hätte fileno(STDOUT) einen anderen Wert in dem Kind als in der Mutter.

$ perldoc -f fileno
   fileno FILEHANDLE
           Returns the file descriptor for a filehandle, or undefined if
           the filehandle is not open.  This is mainly useful for
           constructing bitmaps for "select" and low-level POSIX tty-
           handling operations.  If FILEHANDLE is an expression, the value
           is taken as an indirect filehandle, generally its name.

           You can use this to find out whether two handles refer to the
           same underlying descriptor:

               if (fileno(THIS) == fileno(THAT)) {
                   print "THIS and THAT are dups\n";
               }

           (Filehandles connected to memory objects via new features of
           "open" may return undefined even though they are open.)

Wenn Ihr gegabelt Kinder Perl-Programme auch sind, können Sie „wählen STDOUT“ und setzen $ | es ungepufferte rechts zu markieren, bevor eine Protokollierung geschieht.

Sind Sie sicher, Sie dies ist kein Pufferung Problem? Ich bin nicht vertraut mit POE, damit ich weiß nicht, wie Sie untersuchen würden oder dass korrigieren, aber ich vermute, es ist wert, mindestens.

Lizenziert unter: CC-BY-SA mit Zuschreibung
Nicht verbunden mit StackOverflow
scroll top