por Perl user » 2006-10-16 12:29 @562
Que tal,
Revisando un poco tu código ( que aun no logro comprender tanto ), veo que muy buena parte de tu problemita es cuestión de diseño...
Te explico:
- Tal parece que todas las funciones que usas no son exportadas a tu espacio de nombres actual, todo lo haces accediendo indirectamente a la función por medio del paquete ( eso podría provocarte algunos fallos de seguridad ).
La recomendación es que verifiques como crear módulos y como exportar los símbolos que nada mas requieras.
- veo por allí que mandas un contador a una funcion que ( creo... ) genera una lista de lo que tienes que esperar? no lo sé, se me hace innecesario...
Para esperar por tus procesos hijos ( sin importar cual ) basta con utilizar waitpid( -1, WNOHANG ) como te lo indiqué en un post anterior, de esa manera no te tienes que preocupar por los pids del todo, deja que el sistema lo haga.
- De la misma manera, en un comentario que hice hace días te comentaba sobre sincronización de información, algo que estás ignorando en el código que me muestras... No tienes nada de sincronización para acceder al contador que tienes, no le hagas tanta confianza al scheduler del sistema, es dificil de entender en cuanto a su funcionamiento. Utiliza algo como shared memory o semaforos para sincronizar eso.
Y bueno, no he visto la mayor parte del código, pero eso es principalmente lo que noto de fallo, y en conclusión se resume a un mal diseño para algo multiprocesos (ojo, no multithread).
Saludos,
Marco A. Manzo
[email protected]http://www.unixmonkeys.com/amnesiac/
Perl Programming Language