Perl en Español

  1. Home
  2. Tutoriales
  3. Foro
  4. Artículos
  5. Donativos
  6. Publicidad
 
Índice general » Mundo Perl » Avanzado » Problema Perl bajo Windows y procesos Responder al tema
Nuevo tema


Página 1 de 1  [ 5 mensajes ] 
 
Nota 2010-10-04 10:29 @478

Perlero Nuevo
Registrado: 2008-11-07 06:02 @293
Ubicación: Valladolid
Mensajes: 8
Problema Perl bajo Windows y procesos
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.


Nota 2010-10-04 11:15 @510
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Problema Perl bajo Windows y procesos
¿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


Nota 2010-10-04 13:12 @592

Perlero Nuevo
Registrado: 2008-11-07 06:02 @293
Ubicación: Valladolid
Mensajes: 8
Re: Problema Perl bajo Windows y procesos
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.


Nota 2010-10-04 16:37 @734
Avatar de Usuario
Administrador
Registrado: 2005-07-24 18:12 @800
Ubicación: Valladolid, España
Mensajes: 10270
Re: Problema Perl bajo Windows y procesos
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


Nota 2010-10-04 17:29 @770

Perlero Nuevo
Registrado: 2008-11-07 06:02 @293
Ubicación: Valladolid
Mensajes: 8
Re: Problema Perl bajo Windows y procesos
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


Responder al tema  [ 5 mensajes ] 

Reglas del Foro
No puedes abrir nuevos temas en este Foro
No puedes responder a temas en este Foro
No puedes editar tus mensajes en este Foro
No puedes borrar tus mensajes en este Foro
No puedes enviar adjuntos en este Foro

Publicidad

Socializa

Síguenos por Twitter

Suscríbete GRATUITAMENTE al Boletín de Perl en Español

Saltar a:  
Powered by phpBB © 2000, 2002, 2005, 2007 phpBB Group
Traducción al español por Huan Manwë para phpbb-es.com
phpBB SEO