Microsoft jugó seguro aquí. En su artículo, "Creating a Child Process with Redirected Input and Output", dicen:¿Debo cerrar el identificador heredado que luego pertenece al proceso hijo?
Las manijas abiertas restantes se limpian cuando finaliza este proceso.
Para evitar pérdidas de recursos en una aplicación más grande, cierre los identificadores explícitamente.
Lo cual es completamente inútil. ¿Qué maneja? En que proceso?
Quiero entenderlo.
Cuando se crea un identificador en el proceso primario con SECURITY_ATTRIBUTES.bInheritHandle = TRUE
, un proceso hijo puede verlo y usarlo, y el identificador tiene el mismo valor y derechos de acceso en ambos procesos.
¿Pero es el mismo identificador, o es una copia que tiene la misma representación numérica?
Si paso un mango hRead
a un proceso hijo para que se pueda leer desde una tubería, y el proceso hijo cierra el mango, ¿también tienen que cerrarla desde el proceso padre? ¿No va a limpiar la tubería del proceso secundario?
Mis experimentos muestran que CloseHandle
vuelve al éxito cuando se intenta cerrar un identificador hRead
pasado al niño después de que el niño lo haya cerrado. Esto aboga fuertemente por Sí, deberías cerrarlo. Sin embargo, agradecería un consejo más sólido aquí.
Ah. Por lo tanto, el identificador * se * clona cuando genero un proceso hijo. Eso es lo que buscaba. – GSerg