2010-03-10 23 views
6

Tengo un código de código donde genero procesos secundarios para hacerlo más eficiente. Sin embargo, parecen crear todo tipo de procesos zombies que bloquean los sockets y derriban el sitio.Procesos Zombie que aparecen cuando genero procesos

spawn(:method => :thread) do 
    if @login_user.suggested_group_info.new_record? 
     xxx 
    end 
end 

1) ¿Por qué esto crea procesos zombies? 2) ¿Cómo podría escribir el código de modo que me asegure de matar el proceso antes de que se convierta en zombie?

Respuesta

4

Debe guardar el PID del proceso generado y ejecutar la llamada al sistema waitpid (2) después de que muera. (No sé cómo Rubí hace esto.)

+2

Rubí hace esto más o menos como era de esperar. spawn devuelve un pid; una llamada a Process.waitpid (pid) espera a que el proceso salga y luego recoge el zombie. –

0

También puede trampa para el cierre niño que limpiar el proceso zombie

trap("CLD") { 
    pid = Process.wait 
    puts "Child pid #{pid}: terminated" 
}