首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >如何在崩溃后恢复进程状态?

如何在崩溃后恢复进程状态?
EN

Stack Overflow用户
提问于 2009-05-10 23:34:04
回答 2查看 1.6K关注 0票数 8

在重新启动崩溃的进程时,什么是保持状态的好方法?

我在一个动态口令应用程序中有一个监控器,它监视几个“子系统”gen_servers。

例如,一个是“天气”子系统,它每15分钟生成一个新的天气状态,并处理对当前天气状态的查询。(想想lemonade stand游戏)

如果gen_server崩溃,我希望重新启动它,但应该使用最新天气状态重新启动它,而不是使用init()中硬编码的某种任意状态重新启动。仅仅因为崩溃,模拟状态突然从“冰川风暴”变成“愉快和微风”,这是没有意义的。

我不太愿意在每次更新后使用mnesia或ETS来存储状态,因为这样会增加复杂性;有没有更简单的方法?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2009-05-11 06:48:59

只要它必须在运行时出现,就会建议使用ETS。到目前为止,这个值远远大于复杂性。API很简单,如果您正在处理命名表,那么访问也很简单。您只需在主管启动gen_server之前创建该表。

两个更复杂的选择:

  • 构建了一对进程,一个用于完成工作,另一个用于状态维护。由于第二种方法的简单性,它是非常可靠的。
  • 真正愚蠢的一种方法是,每次状态改变时,以当前状态作为参数交换supervisor的子规范。(微笑)不,只是开玩笑。
票数 5
EN

Stack Overflow用户

发布于 2009-05-11 10:35:27

有没有更简单的方法?

当进程死亡时,它会向supervisor发送包含进程状态的消息,因此您可以使用此值存储在supervisor中(在mnesia或supervisor的状态中),当您的服务器将启动时(在init中),它必须向supervisor发送同步调用以获取State值。我没有真正的例子,但我希望它是有意义的。

无论如何,我真的不认为在记忆中存储State有什么问题。

对不起,我的英语:)

票数 3
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/846312

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档