确保父进程终止时孤立进程被终止

时间:2013-08-13 20:08:25

标签: ruby ruby-1.9 ruby-1.9.3

在Ruby中,我如何确保从我的程序中生成的子进程在我的主进程退出或被杀死时不继续运行?

最初,我认为我可以在主要流程中使用at_exit,但如果我的主要流程获得kill -9编辑或调用Kernel.exec,则无法工作。我需要一个(基本上)万无一失的跨平台解决方案。

1 个答案:

答案 0 :(得分:0)

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

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