Ayuda!!...

Bolo Lacertus lacertus@servidor.unam.mx
Tue, 20 Oct 1998 11:22:11 -0500


Saludos!!!

Bueno, esa es una muy buena pregunta, de hecho, como siempre en Perl,
hay varias formas de solucionarlo.

César Bustos wrote:
> el problema esta cuando desde otro script
> que ejecuto a través de la red (CGI)  hago llamado del primer script , pero
> no lo puedo dejar en segundo plano, siempre el segundo script espera hasta
> que termine el primero ...

Digamos que se me ocurre una forma facil pero poco elegante (incluso
inconveniente para CGI's) y otra que tiene todas las de la ley pero es
un tanticuanto complicada (nada excesivo para alguien que ya progrma
sockets).

Primero la sencilla.

Un truco que he usado en pequeñas aplicaciones para permitir que una
aplicación termine antes que varios procesos que lanza en background
(notese que esto podría generar zombies si permanece como su proceso
originario) es generar una aplicación intermedia que solo se dedique a
lanzar los procesos en background frente al SO.

En español, el programa en Perl genera un script en shell que se dedica
a levantar los programas en background y luego termina, de modo que el
script Perl lo invoque, espera a que termine (el script en shell que
solo lanza procesos sin esperar por ellos) y termina el mismo.

Esta es una forma de sacarle la vuelta, pero suele llenarte de basura
con los scripts de "lanzamiento" de los procesos.

Ahora la "correcta"
Para programar sockets, a menudo se usan Threads, pues bien, una forma
de liberar tu programa mientras espera por la ejecucion de otro es
hacerlo por multithread, en realidad el manejo del multiprocesamiento ha
cambiado desde que yo trabajé con el, pero dependiendo de tu sistema
operativo podrías sacar procesos que sigan esperando por tus programas
en lo que tu programa principal hace otra cosa (terminar la respuesta al
HTTPD por ejemplo), pero de todas maneras tu programa debe esperar a que
termine la ejecución del programa que ejecuta.
Otra posibilidad sería implementar alarmas por tiempo que eviten que
espere mucho tiempo y que termine el programa, pero eso debería terminar
también con el programa que ejecutó o lo dejaría zombie.

Bueno, si se te ocurre una mejor, o te lelga otra sugerencia, estaré
feliz de saber de ellas: Daniel Sol
-- 
Bolo Lacertus: lacertus@servidor.dgsca.unam.mx			==~\___\
http://132.248.71.81/cgi-bin/lacertus/hola			 =__vvvv
-----BEGIN GEEK CODE BLOCK-----
Version: 3.1
GCS/GE/GED d>d? s:+ a-- C++>+++$ US++ P+++>++++$ L E? W++>+++ N+ o? K- 
w--- O !M V- PS+ PE->-- Y+ PGP+ t+ 5? X- R@ tv-- b++>- DI+ D+ G+>++
e+>++ 
h* r-(*) z+ 
------END GEEK CODE BLOCK------
--------- Pie de mensaje --------------------------------
Visite: http://tlali.iztacala.unam.mx/~randrade/perl.shtml
Cancelar inscripcion:
mail to: majordomo@tlali.iztacala.unam.mx
text   : cancelacion perl