Reputation: 28164
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?
Upvotes: 6
Views: 2204
Reputation: 1696
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"
}
Upvotes: 2
Reputation: 2432
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.)
Upvotes: 4