Logo Questions Linux Laravel Mysql Ubuntu Git Menu
 

Zombie Processes Appearing When I Spawn Processes

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?

like image 483
meow Avatar asked Mar 10 '10 23:03

meow


2 Answers

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.)

like image 121
Daniel Newby Avatar answered Oct 13 '22 01:10

Daniel Newby


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"
}
like image 24
Pete Brumm Avatar answered Oct 13 '22 01:10

Pete Brumm