当我生成进程时出现僵尸进程

6

我有一段代码,其中我生成子进程以使其更有效率。然而,它们似乎创建了各种僵尸进程,这些进程会阻塞套接字并导致网站崩溃。

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

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

2个回答

4

在生成的进程中,您需要保存其PID,并在其结束后执行waitpid(2)系统调用。(我不知道Ruby是如何实现的。)


2
Ruby的实现与你预期的相当类似。spawn返回一个pid;对Process.waitpid(pid)的调用等待进程退出并清理僵尸进程。 - Wayne Conrad

2

你还可以捕获子进程的关闭事件,这将清理僵尸进程。

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

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接