Question

Je suis certain que d'utiliser pty.fork() ou os.fork() lorsque les processus d'arrière-plan externes fraie de mon application. (Tels que les moteurs d'échecs)

Je veux que les processus donné naissance à mourir si le parent est tué, comme des applications de reproduction dans un terminal.

Quels sont les hauts et les bas entre les deux fourches?

Était-ce utile?

La solution

Le processus enfant créé avec os.fork() hérite stdin / stdout / stderr du processus parent, alors que l'enfant créé avec pty.fork() est connecté à nouveau terminal pseudo. Vous avez besoin de plus tard, lorsque vous écrivez un programme comme xterm: pty.fork() processus parent renvoie un descripteur terminal de contrôle du processus de l'enfant, afin que vous puissiez représenter visuellement les données qu'il contient et traduire les actions utilisateur en séquences d'entrée du terminal

.

Mise à jour:

De page man pty (7):

  

Un processus qui attend d'être connecté   à un terminal, peut ouvrir l'extrémité esclave   d'un pseudo-terminal et ensuite   entraîné par un programme qui a   ouvrir l'extrémité de maître. Tout ce que   est écrit sur la fin principale est   à condition que le procédé de l'esclave   fin comme si elle était entrée dactylographiée sur   un terminal. Par exemple, écrire le   interrompre le caractère (généralement   contrôle-C) au dispositif maître   provoquerait un signal d'interruption   (SIGINT) soit généré par la   groupe de processus d'avant-plan qui est   relié à l'esclave. Inversement,   tout ce qui est écrit à la   esclave extrémité de la boîte de pseudo-terminal   être lu par le processus qui est   connecté à l'extrémité maître.

Autres conseils

Dans le passé, j'ai toujours utilisé le module subprocess pour cela. Il offre un bon api pour communiquer avec les sous-processus.

Vous pouvez utiliser call(*popenargs, **kwargs) pour bloquer l'exécution d'entre eux, et je crois en utilisant la classe Popen peut gérer l'exécution async.

Consultez la docs pour plus d'informations.

En ce qui concerne l'utilisation os.fork vs pty.fork, les deux sont très dépendant de la plateforme, et ne fonctionnera (ou au moins est testé) avec des fenêtres. Le module pty semble être plus limitée des deux en lisant les documents. La principale différence étant l'aspect pseudo borne. Donc, si vous n'êtes pas prêt à l'architecte de votre code de telle manière à pouvoir utiliser le module subprocess, je serais probablement aller avec os.fork au lieu de pty.fork.

Pseudotermials sont nécessaires pour certaines applications qui attendent vraiment un terminal. Un shell interactif est l'un de ces exemples, mais il y a beaucoup d'autres. L'option pty.fork est pas là comme une autre os.fork mais comme une API spécifique à utiliser un pseudoterminal.

Licencié sous: CC-BY-SA avec attribution
Non affilié à StackOverflow
scroll top