【问题标题】:Zombie Processes Appearing When I Spawn Processes当我生成进程时出现僵尸进程
【发布时间】:2011-01-26 03:51:30
【问题描述】:

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

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

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

【问题讨论】:

    标签: ruby linux process zombie-process


    【解决方案1】:

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

    【讨论】:

    • Ruby 完全按照您的预期完成了这项工作。 spawn 返回一个 pid;调用 Process.waitpid(pid) 等待进程退出,然后收割僵尸。
    【解决方案2】:

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

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

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 2016-07-03
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2014-01-08
      • 1970-01-01
      • 2014-09-30
      • 1970-01-01
      相关资源
      最近更新 更多