Fork() inmortal en Perl

Gunnar Wolf gwolf en asc.unam.mx
Mie Ene 5 10:54:51 CST 2000


Estoy trabajando con un problema que espero me puedan ayudar a resolver:
Recientemente, añadi a mi proyectito (wpm) el poder atender mas de una
peticion simultanea, por medio de un fork() cada que recibe una conexion.
Obviamente, el proceso padre cierra la conexion y sigue esperando,
mientras que el proceso hijo atiende a dicha conexion y, al terminar esta,
muere. Sin embargo, el proceso queda como zombie, y nunca muere. No se si
haga falta implementar un codigo de limpieza en el padre, ni como hacerlo.

El pedazo de codigo relevante es:

    while ($client = $server->accept()) {                                                                                                                  
        die "Can't fork!: $@" if (!defined ($child=fork()));                                                                                               
        if ($child == 0) {                                                                       
            # We are the child process after a fork. We                                                                                                    
            # continue doing our stuff...                                                                                                                  
(...)
            while ($string=<$client>) {                                                                                                                    
(...)
            }                                                                                                                                              
            close $client;                                                                                                                                 
            exit 0;                                                                                                                                        
        } else {                                                                                                                                           
            # After the fork, we are the parent                                                                                                            
            # process, so we close the socket and                                                                                                          
            # leave it just for the child. We can                                                                                                          
            # now go back to answer additional queries.                                                                                                    
            close $client;                                                                                                                                 
        }                                                                                                                                                  
    }

A alguien se le ocurre lo que puede estar pasando?

-------------------------------------------------------------------
                 Gunnar Wolf    gwolf en asc.unam.mx
     Universidad Nacional Autónoma de México, Campus Iztacala
  Jefatura de Sección de Admon. de Sistemas y Telecomunicaciones
        Area de Seguridad en Computo - DCI - DGSCA - UNAM
-------------------------------------------------------------------


-- 
Para desuscribirse, mande correo a: ayuda-unsubscribe en linux.org.mx
Para comandos adicionales, envíelo a: ayuda-help en linux.org.mx




Más información sobre la lista de distribución Ayuda