J'écris un programme qui doit exécuter d'autres processus externes; En ce moment, le programme lance les lignes de commande des processus via popen, récupère toutes les sorties, puis récupère le statut de sortie via pclose. Cependant, pour les processus à exécution rapide (par exemple, les erreurs de processus lancées rapidement), l'appel de pclose ne peut pas obtenir l'état de sortie (pclose renvoie -1, errno est ECHILD).Alternatives à popen/pclose?
Existe-t-il un moyen pour moi d'imiter le comportement de type popen/pclose, sauf d'une manière qui garantit la capture de la fin du processus "event" et du code de retour résultant? Comment puis-je éviter la condition de concurrence inhérente avec pclose et la fin du processus lancé?
Comme le popen est disponible sur Windows, qui n'a pas de fourche, il n'est évidemment pas toujours un wrapper. –
J'ai réécrit mon code pour le faire (fork/exec/dup/etc.) Et maintenant je reçois des échecs intermittents sur waitpid (...) retournant -1/errno = ECHILD. Merde. – Joe
Ok: j'ai compris ça. Ce code fonctionne très bien. Mon ancien code avec popen/pclose fonctionne très bien. Ce qui ne fonctionnait PAS très bien était le gestionnaire SIGCHLD caché qui était enterré dans le code commun dont j'ai hérité. OH SNAP. J'étais fondamentalement dans une course contre ce gestionnaire (qui appelait simplement waitpid (-1, ...). Leçon apprise: lisez toute la page man, et n'assumez rien! – Joe