Ensure orphaned processes are killed when the parent process dies

橙三吉。 提交于 2019-12-06 12:05:34

问题


In Ruby, how do I ensure that child processes spawned from my program don't keep running when my main process exits or is killed?

Initially I thought I could just use at_exit in the main process, but that won't work if my main process gets kill -9ed or calls Kernel.exec. I need a solution that is (basically) foolproof, and cross-platform.


回答1:


If you have to handle kill -9 termination for your parent app, then you have only a couple of choices that I can see:

  • Create a work queue manager and spawn/kill child processes from work queue manager. If you can't guarantee that the work queue manager won't also be killed without warning, then option 2 is your only choice I think, since the only thing you know for sure is that the child processes are still running.
    • http://www.celeryproject.org/
    • http://aws.amazon.com/elasticbeanstalk/
      • More aggressive approach - basically spawn off whole OS instances but they'll definitely get killed off within your parameters for operation
  • Have the child processes check a "heartbeat" from the parent process through RPC or monitoring parent PID in memory or watching a date/time on keep-alive file in /tmp to make sure it's current.
    • If the child processes fail to see the parent processes doing it's job of either responding to RPC messages, staying in memory itself, or keeping a file date/time current the child processes must kill themselves.


来源:https://stackoverflow.com/questions/18218300/ensure-orphaned-processes-are-killed-when-the-parent-process-dies

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!