Microsoft joué en toute sécurité ici. Dans leur article, "Creating a Child Process with Redirected Input and Output", ils disent:Est-ce que je dois fermer le handle hérité possédé ultérieurement par le processus enfant?
Les poignées ouvertes restantes sont nettoyées à la fin de ce processus.
Pour éviter les fuites de ressources dans une application plus importante, fermez les poignées explicitement.
Ce qui est parfaitement inutile. Quelles poignées? Dans quel processus?
Je veux obtenir ma tête autour d'elle. Lorsqu'un handle est créé dans le processus parent avec SECURITY_ATTRIBUTES.bInheritHandle = TRUE
, un processus enfant peut le voir et l'utiliser, et le handle a la même valeur et les mêmes droits d'accès dans les deux processus.
Mais est-ce la même poignée, ou est-ce une copie qui a la même représentation numérique?
Si je passe une poignée hRead
à un processus enfant afin qu'il puisse lire à partir d'un tuyau, et le processus de l'enfant ferme la poignée, dois-je aussi le fermer du processus parent? N'effacera-t-il pas le tuyau sous le processus enfant? Mes expériences montrent que CloseHandle
renvoie un succès lorsque vous essayez de fermer un handle hRead
transmis à l'enfant après que l'enfant l'a fermé. Cela plaide fortement pour Oui, vous devriez le fermer. Cependant, j'apprécierais un conseil plus solide ici.
Ah. Donc, le handle * est * cloné lorsque je génère un processus fils. C'est ce que j'étais après. – GSerg