Dado que parece que no hay forma de utilizar fd ya abierto después de exec
,¿Por qué no es close_on_exec la configuración predeterminada?
¿por qué este indicador no es el predeterminado?
Dado que parece que no hay forma de utilizar fd ya abierto después de exec
,¿Por qué no es close_on_exec la configuración predeterminada?
¿por qué este indicador no es el predeterminado?
Porque en UNIX una de las características más utilizadas es/was secuencias de canalización entre procesos, y no se puede hacer si se establece el indicador CLOEXEC (proceso hijo no puede heredar descriptor (es) de archivo, por ej .: STDOUT_FILENO).
Y no, no es cierto que no pueda usar descriptores de archivos heredados después de exec (ejemplo: streams estándar). También puede usar cualquier descriptor de archivo heredado siempre que sepa su valor (es un número entero). Este valor a menudo se pasa a un proceso secundario por argumento (bastantes programas UNIX lo hacen), o puede hacerlo de cualquier otra manera utilizando cualquier mecanismo de IPC (comunicación entre procesos) de su elección.
Descriptores de archivo puede se puede utilizar después de una llamada exec
; así es como las utilidades de Unix obtienen sus fds de entrada/salida/error estándar del shell, por ejemplo.
Primer on-exec no es el valor por defecto porque el POSIX standard (y la tradición Unix) mandatos el comportamiento opuesto:
descriptores de archivos abiertos imagen del proceso de llamada en quedará abierta la imagen del nuevo proceso en, excepto para aquellos cuyo close-on-flag
FD_CLOEXEC
se establece.
No me importaría obtener una respuesta más completa a esto, pero es bastante fácil adivinar que es por compatibilidad con versiones anteriores. la bandera de close-on-exec tuvo que ser introducida alguna vez. El código existente antes de esa fecha no lo conocía y no funcionaría correctamente, a menos que se haya cambiado. Por lo tanto, está apagado por defecto.
Lamentablemente, se producen errores debido a esto, un proceso demoníaco que bifurca un cgi puede dejar el socket de escucha abierto, y si el cgi no se cierra o cierra, no se puede reiniciar el daemon. Así que estoy de acuerdo contigo en que no es realmente un buen incumplimiento.
¿Hay algún otro caso de uso además de los fds de entrada/salida/error? –
bifurcación no es ejecutivo, sin embargo. –
Oops, pedo cerebro. Bien, hay soporte para la redirección fd arbitraria en las conchas modernas, que deben haberse introducido con una razón; aunque nunca me pareció útil. –