2010-03-10 63 views
6

我有一段代码,我在其中产生子进程以使其更高效。但是,他们似乎创造了各种各样的僵尸进程,它们会阻塞套接字并将网站关闭。当我产生进程时出现僵尸进程

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

1)为什么创建僵尸进程? 2)我如何编写代码,以确保在成为僵尸之前杀死进程?

回答

4

您必须保存衍生进程的PID,并在其死后执行waitpid(2)系统调用。 (我不知道红宝石怎么做到这一点。)

+2

红宝石做到这一点几乎是你所期望的。 spawn返回一个pid;对Process.waitpid(pid)的调用将等待进程退出并收割僵尸。 – 2010-03-11 00:22:31

0

您还可以捕获为孩子关机,这将清理僵尸进程

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