Un punto que no se ha hecho en las respuestas existentes es que permitir que un proceso secundario herede identificadores no solo afecta el proceso secundario; también puede afectar la vida útil del objeto al que se refieren las asas. Si el proceso principal finaliza, los identificadores en el proceso hijo mantendrán vivo el objeto.
Al permitir que un proceso hijo herede identificadores, debe considerar si dará como resultado un objeto que dure más de lo que debería; por ejemplo, algunas aplicaciones solo quieren permitir que una instancia se ejecute a la vez, y pueden hacer eso al crear un objeto de evento con un nombre de pila y ver si ya existe. Si crean un proceso hijo que hereda ese objeto de evento y sobrevive al padre, podría dar lugar a un falso positivo.
Más comúnmente, un identificador heredado de un archivo puede hacer que el archivo permanezca en uso (y, por lo tanto, inaccesible) más de lo que debería.
Por esta razón, la mejor práctica es:
Por otro lado, esto a veces puede ser útil; por ejemplo, si quiere el proceso hijo para que cuente como una instancia del proceso principal, o para que un archivo permanezca inaccesible hasta que el hijo haya salido. Otro truco es hacer que un niño herede un identificador de un objeto nombrado y luego usar la existencia o inexistencia del objeto para determinar si el hijo aún está vivo, sin tener que pasar por un identificador de proceso o proceso.
¿Pero no es verdad que cada proceso tiene su propia tabla de manejo? ¿Significaría que si se utiliza la herencia, que la tabla de manejo completo se copia al nuevo proceso? ¿No es más lento que llamar unas pocas veces OpenXxx para algunos objetos específicos? – bkausbk
@bkausbk: no puede abrir el objeto si no tiene nombre. – wj32