Je développe une DLL en C++ qui doit écrire des données via une connexion TCP/IP (précédemment établie) en utilisant l'appel write(). Pour être précis, la DLL doit envoyer un petit message «Processus 12345 se termine à 2007-09-27 15:30:42, la valeur de i est 131» sur le fil lorsque le processus tombe en panne. Malheureusement, tous les moyens que je connais pour détecter la fin du processus sont apparemment trop tard pour que les appels réseau réussissent. En particulier, j'ai essayé les approches suivantes et l'appel write() retourné -1 dans tous les cas:Comment puis-je effectuer des E/S réseau à la fin de la vie d'un processus?
- Appel write() du destructor d'un objet global.
- Appel de write() à partir d'une fonction de rappel enregistrée en utilisant atexit().
- Appel write() à partir de DllMain (dans le cas où l'argument
reason
estDLL_PROCESS_DETACH
). Je sais que ce n'est pas une chose sûre, mais je suis un peu désespéré. :-)
Je suis conscient qu'une DLL ne peut pas détecter tout arrêt de processus (il aurait été déchargé longtemps avant que le processus se termine) mais étant donné que les données d'arrêt que la DLL doit envoyer dépend autre code dans la DLL, c'est acceptable. Je suis fondamentalement à la recherche du dernier moment où je peux effectuer en toute sécurité des réseaux d'E/S.
Est-ce que quelqu'un sait comment faire cela?
L'utilisation d'un processus de surveillance est une bonne idée. Je vais y réfléchir un peu. Malheureusement, les pages que vos liens pointent à parler seulement de la gestion des processus de processus étrangers (pas l'actuel). –