Frage

Ich bin nicht sicher, ob Gebrauch pty.fork() oder os.fork(), wenn sie von meiner app externen Hintergrundprozesse Laichen. (Wie Schach-Engines)

Ich mag die gelaicht Prozesse sterben, wenn die Eltern getötet wird, wie bei Anwendungen in einem Terminal Laichen.

Was sind die Höhen und Tiefen zwischen den beiden Gabeln?

War es hilfreich?

Lösung

Das Kind Prozess mit os.fork() erstellt inherits stdin / stdout / stderr aus übergeordnetem Prozess, während das Kind mit pty.fork() geschaffen, um neuen Pseudo-Terminal verbunden ist. Sie müssen die später, wenn Sie ein Programm wie xterm schreiben: pty.fork() in Eltern-Prozess gibt einen Descriptor-Anschluss des Kindes Prozess zu steuern, so dass Sie visuell Daten daraus darstellen können und Benutzeraktionen in Terminal Eingangssequenzen übersetzen

.

Update:

Von pty (7) man-Seite:

  

Ein Prozess, der erwartet angeschlossen werden   zu einem Terminal kann, öffnen Sie das Slave-Ende   ein Pseudo-Terminal und dann   durch ein Programm gesteuert, das hat   das Master-Ende geöffnet. Alles was   wird auf dem Master-Ende geschrieben ist   den Prozess auf dem Slave vorgesehen   Ende, als ob es wurde Eingabe getippt auf   ein Terminal. Zum Beispiel schreibt die   Interrupt-Zeichen (in der Regel   Steuer-C) an die Master-Einrichtung   verursachen würde ein Interruptsignal   (SIGINT) werden für die erzeugten   Vordergrundprozess Gruppe, die ist   den Slave verbunden ist. Umgekehrt,   alles, was auf dem geschrieben wird   Slave-Ende des pseudo-Terminal kann   durch den Prozess gelesen werden, ist   verbunden mit dem Master-Ende.

Andere Tipps

In der Vergangenheit habe ich immer das subprocess Modul zum Einsatz. Es bietet eine gute api mit Subprozesse für die Kommunikation.

Sie können call(*popenargs, **kwargs) verwenden für die Ausführung von ihnen blockieren, und ich glaube, die Popen-Klasse kann async Ausführung behandeln.

Schauen Sie sich die docs für weitere Informationen.

Was mit os.fork vs pty.fork sind beide sehr plattformabhängig, und weder arbeiten (oder zumindest getestet wird) mit Fenstern. Das pty Modul scheint die mehr eingeschränkt der beiden durch das Lesen der Dokumente zu werden. Der Hauptunterschied ist, der Pseudo-Terminal Aspekt. Also, wenn Sie an den Architekten nicht bereit sind, Ihren Code in einer solchen Art und Weise, wie in der Lage sein, den subprocess Modul zu verwenden, ich wahrscheinlich mit os.fork statt pty.fork gehen würde.

Pseudotermials sind für einige Anwendungen notwendig, die wirklich ein Terminal erwarten. Eine interaktive Shell ist eines dieser Beispiele, aber es gibt viele andere. Die pty.fork Option ist nicht da als ein andere os.fork sondern als eine bestimmte API einen Pseudoterminal zu nutzen.

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