Python:cuando el uso de pty.fork() versus os.fork()
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?
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.