• Publicidad

Problema Perl bajo Windows y procesos

Así que programas sin strict y las expresiones regulares son otro modo de hablar. Aquí encontrarás respuestas de nivel avanzado, no recomendable para los débiles de corazón.

Problema Perl bajo Windows y procesos

Notapor julmito » 2010-10-04 10:29 @478

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.
julmito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-11-07 06:02 @293
Ubicación: Valladolid

Publicidad

Re: Problema Perl bajo Windows y procesos

Notapor explorer » 2010-10-04 11:15 @510

¿Y qué error sale?

fork(), en Windows, no funcionaba igual que en los Linux, hasta hace poco, que con fondos de Micro$oft y con el desarrollo de la empresa ActiveState, se consiguió implementarlo por medio de la creación de otro proceso que comparte el mismo espacio que el proceso padre (creo que eso es lo que pone al principio de perlfork).

Si vas a las secciones CAVEATS AND LIMITATIONS y BUGS, se comenta que los open() con "|-" no están soportados, pero ofrece código alternativo.

Lo mismo pasa con IPC::Open3, que advierte que abrir a "|-" no funciona en Windows.

Ahora... sí te funciona en Linux, ¿para qué quieres romperte la cabeza con Windows? ;)
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema Perl bajo Windows y procesos

Notapor julmito » 2010-10-04 13:12 @592

Muchas gracias por responder, Explorer, el error es como este:
Imagen
pero con el ejecutable perl.exe en lugar de basichacked.exe.

Un par de veces le di a depurar, y se abrió Visual C, pero con las instrucciones en asm, cualquiera se mete. Intentaba ver si veía algún nombre de dll o algo para tener más pistas, pero nada.

Si, cuando estaba mirando, si usaba fork() para Windows, me di cuenta que no crea dos procesos como en Linux (independientes) sino que crea un hilo (que comparten muchas zonas de la memoria para todos los hilos. No sé si en Perl fork() para Windows seguirá esta teoría de los hilos o no, pero no modifico variables).

Lo malo ha sido que funcionó bien en esas pruebas y al final, suponía que estaba haciendo algo mal...

Por lo que me comentas de open3(), fork(), buscaré algún módulo para lanzar un proceso bajo Windows y poder guardar stdout y stderr en ficheros, mientras el programa main continúa...

Y echaré un vistazo a ver si con alguna librería para abrir procesos/hilos de la API de Windows.

Lástima. Gracias, paisano.
julmito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-11-07 06:02 @293
Ubicación: Valladolid

Re: Problema Perl bajo Windows y procesos

Notapor explorer » 2010-10-04 16:37 @734

En el hilo Función exec() y system() en Windows se comentan un par de módulos para arrancar procesos en Windows. Lo que no sé es si heredan los flujos de entrada y salida.
JF^D Perl programming & Raku programming. Grupo en Telegram: https://t.me/Perl_ES
Avatar de Usuario
explorer
Administrador
Administrador
 
Mensajes: 14480
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España

Re: Problema Perl bajo Windows y procesos

Notapor julmito » 2010-10-04 17:29 @770

Gracias, mañana le echo un vistazo. He visto también IPC:Run3, pero realmente no sé cómo ejecutará un proceso bajo Windows. Ya lo leeré.

Un saludo
julmito
Perlero nuevo
Perlero nuevo
 
Mensajes: 8
Registrado: 2008-11-07 06:02 @293
Ubicación: Valladolid


Volver a Avanzado

¿Quién está conectado?

Usuarios navegando por este Foro: No hay usuarios registrados visitando el Foro y 1 invitado

cron