2012-06-13 11 views
6

¿Cuál es la función correcta para llamar para salir del proceso secundario después de os.fork()?Salir del proceso secundario después de os.fork()

La documentación para os._exit()states:

La manera estándar para salir es sys.exit(n).

_exit() normalmente solo debe utilizarse en el proceso secundario después de fork().

No dice si es aceptable finalizar el proceso secundario usando sys.exit(). De continuación:

  1. ¿Lo es?
  2. ¿Hay algún efecto secundario potencial de hacerlo?

Respuesta

8

The unix way es que si usted es un hijo de fork, entonces llama al _exit. La principal diferencia entre exit y _exit es que exit tidies más - llama a los manipuladores atexit, vuelca stdio etc, mientras que _exit hace la mínima cantidad de materia en el espacio de usuario, sólo conseguir el kernel para cerrar todos sus archivos etc.

Este se traduce bastante directamente al mundo python con sys.exit haciendo lo que exit hace y haciendo más del apagado del intérprete python, donde os._exit hace lo mínimo posible.

Si usted es un hijo de fork y se llama a exit en lugar de _exit entonces puede acabar llamando a los manipuladores de salida que el padre volverá a llamar cuando sale causando un comportamiento indefinido.

1

parte de la documentación sobre os._exit(n) que no citó es

salir del proceso con el estado n, sin llamar a los manipuladores de limpieza, vaciando los buffers stdio, etc.

Entonces, ¿cómo Estoy leyendo esto, debes usar os._exit() siempre y cuando compartas manejadores de archivos (para que estén cerca() 'd por otro proceso y tú mismo te encargues de enjuagar los buffers (si es importante en tu caso). Sin compartió recursos (como en "archivos") - no importa.

Por lo tanto, si los procesos secundarios son solo computacionales y se alimentan con datos sin procesar (no con controladores de recursos), es seguro usar exit().

Cuestiones relacionadas