ruby - 确保在父进程死亡时杀死孤立进程

标签 ruby ruby-1.9 ruby-1.9.3

在 Ruby 中,当我的主进程退出或被终止时,如何确保从我的程序派生的子进程不会继续运行?

最初我以为我可以在主进程中使用 at_exit,但是如果我的主进程被 kill -9ed 或调用 ,那将不起作用内核.exec。我需要一个(基本上)万无一失且跨平台的解决方案。

最佳答案

如果您必须为您的父应用程序处理 kill -9 终止,那么您只有几个我能看到的选择:

  • 创建工作队列管理器并从工作队列管理器中生成/终止子进程。如果您不能保证工作队列管理器也不会在没有警告的情况下被杀死,那么我认为选项 2 是您唯一的选择,因为您唯一确定的是子进程仍在运行。
  • 让子进程通过 RPC 检查来自父进程的“心跳”或监视内存中的父 PID 或查看/tmp 中保持事件文件的日期/时间以确保它是最新的。
    • 如果子进程无法看到父进程正在执行其响应 RPC 消息、保留在内存中或使文件日期/时间保持最新的工作,则子进程必须自行终止。

关于ruby - 确保在父进程死亡时杀死孤立进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18218300/

相关文章:

ruby-on-rails - Ruby on Rails : Why does the user's encrypted password get changed in the DB when I use the "toggle" method on the admin attribute?

ruby-on-rails - 不支持从 define_method() 定义的方法隐式传递 super 参数

ruby - 如何选择 CSV 文件中的特定行?

ruby - 如何为 Ruby 安装 Selenium 和 Nokogiri?

rvm - 终端启动时出错

ruby - 你如何理解 Ruby 中的这个三元条件?

mysql - 如何显示连接另一个表的表中的字段?

Ruby 1.9.2 - 读取和解析远程 CSV

ruby TCP 服务器 : Accepting a known socket

ruby-on-rails - "Anonymous modules have no name to be referenced by"到底是什么意思?