Pregunta

No estoy seguro de si el uso de pty.fork() o os.fork() cuando la reproducción externa de procesos en segundo plano de mi aplicación.(Tales como motores de ajedrez)

Quiero que los nuevos procesos a morir si el padre es asesinado, como con el desove de las aplicaciones en un terminal.

¿Cuáles son las subidas y bajadas entre las dos horquillas?

¿Fue útil?

Solución

El proceso hijo creado con os.fork() hereda stdin / stdout / stderr de proceso padre, mientras el niño creado con pty.fork() está conectado a la nueva pseudo terminal. Es necesario la tarde, cuando se escribe un programa como xterm: pty.fork() en proceso padre devuelve un descriptor para controlar el terminal de proceso hijo, por lo que puede representar visualmente los datos de ella y traducir las acciones del usuario en las secuencias de entrada del terminal

.

Actualización:

Desde Pty (7) página del manual:

  

Un proceso que espera para ser conectado   a un terminal, puede abrir el extremo esclavo   de un pseudo-terminal y luego estar   impulsado por un programa que tiene   abierto el extremo maestro. Cualquier cosa que   que está escrito en el extremo principal está   proporcionada al proceso en el esclavo   terminar como si se escribe en la entrada   un terminal. Por ejemplo, la escritura   interrumpir el carácter (por lo general   control-C) al dispositivo maestro   causaría una señal de interrupción   (SIGINT) sea generado de la   grupo proceso en primer plano que es   conectado a la esclava. Por el contrario,   todo lo que se escribe en el   final esclavo de la lata pseudo-terminal   ser leído por el proceso que se   conectado al extremo maestro.

Otros consejos

En el pasado, yo siempre he usado el subprocess módulo para esto.Proporciona una buena api para comunicarse con los subprocesos.

Puede utilizar call(*popenargs, **kwargs) para el bloqueo de la ejecución de ellos, y creo que con el Popen la clase puede manejar async ejecución.

Retirar el docs para obtener más información.

Tan lejos como el uso de os.fork vs pty.fork, ambos son altamente dependiente de la plataforma, y tampoco funciona (o al menos está probado) con windows.El pty módulo parece ser el más limitado de los dos por la lectura de los documentos.La diferencia principal de la pseudo terminal de aspecto.Así que si no están dispuestos a arquitecto de su código de tal manera como para ser capaz de utilizar el subprocess módulo, probablemente me vaya con os.fork en lugar de pty.fork.

Pseudotermials son necesarios para algunas aplicaciones que realmente esperan un terminal. Un shell interactivo es uno de estos ejemplos, pero hay muchos otros. La opción pty.fork no está allí como otro os.fork sino como una API específica para usar un pseudoterminal.

Licenciado bajo: CC-BY-SA con atribución
No afiliado a StackOverflow
scroll top