2010-03-10 9 views
6

Tôi có một đoạn mã mà tôi sinh ra các quy trình con để làm cho nó hiệu quả hơn. Tuy nhiên, chúng xuất hiện để tạo ra tất cả các loại quá trình zombie mà chặn ổ cắm và mang xuống trang web.Quá trình Zombie xuất hiện Khi tôi sinh ra quy trình

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

1) Tại sao quá trình tạo zombie này? 2) Làm thế nào tôi có thể viết mã như vậy mà tôi chắc chắn rằng tôi giết quá trình trước khi nó trở thành một zombie?

Trả lời

4

Bạn phải lưu PID của quá trình sinh ra và thực hiện cuộc gọi hệ thống waitpid (2) sau khi nó chết. (Tôi không biết làm thế nào của Ruby thực hiện điều này.)

+2

của Ruby thực hiện điều này khá nhiều như bạn mong muốn. đẻ trứng trả về một pid; một cuộc gọi đến Process.waitpid (pid) chờ quá trình thoát ra và sau đó gặt hái zombie. –

0

Bạn cũng có thể bẫy cho shutdown con sẽ dọn dẹp quá trình zombie

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