SIGPIPE, perl et Win32 - Perl - Programmation
Marsh Posté le 30-06-2005 à 09:42:43
il me semble que SIGPIPE marche sous windows? enfin je peux me tromper. Mais en fait je ne vois pas en koi ca t'aiderais? si tu quitte ton programme perl alors c'est ton .exe qui recevra un SIGPIPE, et c'est à lui de quitter à ce moment la. Mais j'imagine que tu n'a aucune controle sur cette appli la.
En fait il faudrait que tu arrive à chopper le pid de ton .exe
Ensuite si tu est sous windows tu pourra meme utiliser Win32::Process::KillProcess($pid, $exitcode) qui doit etre mieux géré que kill.
Pour chopper le pid tu pourrais inspecter la table des process avec ca : http://search.cpan.org/~wyant/Win3 [...] nfo-1.005/
Marsh Posté le 29-06-2005 à 23:11:07
Hello,
Tout d'abord je sais que les signaux ne sont pas vraiment supporté sous perl Win32. C'est juste que je ne savais pas trop quoi mettre comme titre.
Le problème : dans une application perl, je dois lancer une autre appli (Utilisant l'API Win32) et qui me renvoit les résultats sur la sortie standard, du genre :
open (CMD, "mon_programme_de_la_mort.exe |" );
Sauf, que lorsque je quitte l'application principale (en perl donc, via un ctrl/c ou un coup de TaskManager), l'autre l'appli (dont j'ai aussi le code C++) ne quitte jamais, elle continue à écrire imperturbablement sur la sortie standard.
Donc, voilà, je me doute bien, que les SIGPIPE ne sont pas gérés sous Win32, donc je serais curieux de savoir s'il y a un moyen de terminer le sous-processus ouvert par Open.
J'ai déjà essayé sans trop de succès :
- fork + IO::Pipe : Ah ben, ça ne marche pas du tout.
- Win32::Process::Create : On récupère où la sortie ?
- kill : ça fonctionnerait si je savais comment récupérer automatiquement le pid du processus créé.
Sinon, la méthode goret :
- IO::Socket : la fermeture est effectivement repérée à l'autre bout, mais bon ...
Quelqu'un s'est déjà cassé les dents là dessus ? Une petite piste de recherche à me mettre sous la dent ?
Merci !!