I have a pieces of code where i spawn off children processes to make it more efficient. However, they appear to create all sorts of zombie processes which block sockets and bring down the site.
spawn(:method => :thread) do
if @login_user.suggested_group_info.new_record?
xxx
end
end
1) Why is this creating zombie processes? 2) How could i write the code such that i make sure i kill the process before it becomes a zombie?
You have to save the PID of the spawned process and execute the waitpid(2) system call upon it after it dies. (I don't know how Ruby does this.)
You can also trap for the child shutdown which will clean up the zombie process
trap("CLD") {
pid = Process.wait
puts "Child pid #{pid}: terminated"
}
If you love us? You can donate to us via Paypal or buy me a coffee so we can maintain and grow! Thank you!
Donate Us With