Hola, estoy reescribiendo un código que provocaba que un perl.exe generara un error y se cerraba.
El objetivo de esta parte del código es ejecutar un proceso y generar los ficheros stdout.log y stderr.log. Además se lee cada 5 s la parte de stdout.log y ejecuto unas comprobaciones.
La primera vez abría con open3(), y generaba dos procesos con fork(). Creaba dos sockets; con el principal y con lectura no bloqueante comprobaba si había novedades y si las había las cargaba en el principal. Aparentemente, funcionaba bien, pero a veces, generaba un error, con el mismo proceso, aleatorio totalmente. Nada más arrancar o al terminar. Cambiando open3() y los fork(), sockets... por system(""), y perdiendo la salida, funcionaba bien.
El segundo intento, abro con open3(). Genero dos procesos con fork(), cada uno bloqueado a stdout y stderr que lo único que hacen es escribir en un fichero temporal la salida stdout/stderr. Con otro fork(), cargo la parte del fichero que se escribe cada x seg., y hago unas comprobaciones. Bajo Linux, perfecto. Bajo Windows, perl.exe ha generado un error.
El problema no sé si es por usar fork(), que veo que lo emula usando hilos, o de open3(). Lo siguiente sería usar algún módulo propio de Windows. El perl.exe he intentado depurarlo, pero no lo consigo, quitando partes de código, escribiendo texto en stdout... y no he logrado nada, mismo error y no sé exactamente en que línea.
He probado a actualizar a la última versión de Perl y de los módulos que uso, pero nada.
¿Tenéis alguna experiencia con fork() u open3 bajo Windows?
Cualquier comentario se agracederá.
Gracias y saludos.