首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >Erlang替代trap_exit?

Erlang替代trap_exit?
EN

Stack Overflow用户
提问于 2014-10-10 18:21:52
回答 2查看 313关注 0票数 0

我想在我的gen_server停止时执行一些代码。我有我的gen_server陷阱出口(我在init回调中添加了process_flag(trap_exit, true) )。这很好,因为terminate/2总是在进程退出之前被调用。我知道,由于我捕获出口,链接的进程崩溃了,不会使我创建的gen_server崩溃。我可以解决这个问题,但我想知道是否有其他方法可以替代使用process_flag(trap_exit, true)来实现这一点呢?

我只想要一个“在进程退出之前”回调。还有像这个出口这样的东西吗?

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2014-10-12 20:42:37

@Pascal的回答是完全正确的,但我想提出另一个建议。

有时,您希望通过gen_server生成进程,但通常您可以将它们放到监督层次结构中,这要安全得多。您可以让相同的主管使用one_for_all重新启动策略生成这些进程和one_for_all。如果其中一个进程死亡,它们都会重新启动。其次,您必须指定关机策略的超时-这将确保终止函数将被调用。

票数 1
EN

Stack Overflow用户

发布于 2014-10-10 22:14:23

兄弟会医生

当trap_exit设置为true时,到达进程的退出信号将转换为{“退出”、“原因”}消息,这些消息可以作为普通消息接收。如果trap_exit设置为false,进程如果接收到正常以外的退出信号,并且退出信号被传播到其链接进程,则退出。应用程序进程通常不应该捕获出口。

这意味着,如果其链接进程中的任何一个异常死亡,设置为trap_exit标志为true的进程将不会退出。它必须有一个带有子句的接收块来捕获表单{'EXIT', From, Reason}的任何消息。在这个接收子句中,您可以在最终停止进程之前做您需要的事情。

在gen_server中,您必须编写一个回调Module:handle_info({'EXIT', From, Reason}, State) -> Result

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

https://stackoverflow.com/questions/26305697

复制
相关文章

相似问题

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