6

我有一段代码,我在其中生成子进程以提高效率。但是,它们似乎会创建各种僵尸进程,这些进程会阻塞套接字并关闭站点。

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

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

4

2 回答 2

4

您必须保存生成进程的 PID 并在它死后对其执行 waitpid(2) 系统调用。(我不知道 Ruby 是如何做到这一点的。)

于 2010-03-10T23:58:03.203 回答
2

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

trap("CLD") {
  pid = Process.wait
  puts "Child pid #{pid}: terminated"
}
于 2012-08-01T20:34:12.450 回答