确保父进程终止时孤立进程被终止
在Ruby中,我如何确保从我的程序中生成的子进程在主进程退出或被杀死时不继续运行?
最初我以为我可以在主进程中使用at_exit
,但是如果我的主进程被kill -9
ed或者调用Kernel.exec
,这将Kernel.exec
。 我需要一个(基本上)万无一失的跨平台解决方案。
如果您必须为您的父应用程序处理kill -9终止,那么您只能看到几个选项:
- 创建工作队列管理器并从工作队列管理器生成/终止子进程。 如果你不能保证工作队列管理器也不会在没有警告的情况下被杀死,那么我认为选项2是你唯一的选择,因为你唯一知道的是子进程仍在运行。
- http://www.celeryproject.org/
- http://aws.amazon.com/elasticbeanstalk/
- 更积极的方法 – 基本上产生整个操作系统实例,但它们肯定会在您的参数中被杀死以进行操作
- 让子进程通过RPC检查来自父进程的“心跳”或监视内存中的父PID或在/ tmp中查看保持活动文件上的日期/时间以确保它是最新的。
- 如果子进程无法看到父进程执行它的任务是响应RPC消息,保留在内存本身,或保持文件日期/时间最新,子进程必须自行终止。