2

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

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

4

1 回答 1

0

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

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