首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >ERLANG捕获SIGTERM

ERLANG捕获SIGTERM
EN

Stack Overflow用户
提问于 2014-11-03 09:56:40
回答 1查看 888关注 0票数 3

相信你做得很好。

我需要在erlang运行时捕获SIGTERM,这样我就可以将ets的状态保存到dets文件中&当系统再次启动时,它将从停止的点开始。我可以编写一个C程序来捕获SIGTERM,但是VM也会捕获相同的信号。现在,我如何让ERLANG忽略SIGTERM,这样只有我的C程序才能捕捉到信号,并将它传递给erlang,这样它就可以在退出ting之前保存状态。

EN

回答 1

Stack Overflow用户

回答已采纳

发布于 2014-11-03 10:43:55

简单的解决方案:不要将SIGTERM发送到任何Erlang进程。只将它发送到C程序,并让它充当您的Erlang程序的信号监听器,它知道如何与之交谈。传统的方法是让C程序在启动时编写PID,然后编写shell命令,从某个临时文件读取C进程的PID。关机shell命令不需要知道任何关于Erlang的信息。

不过,有更好的方法来处理这件事。你为什么要等SIGTERM?如果您在*nix系统上运行一个始终打开的服务,那么您应该有与系统一起工作的启动和关闭脚本。这些命令可以发送“干净关机”命令给您的Erlang服务,无论您想如何编写它们(例如,它们可能是或调用脚本本身)。

但是,如果您试图在操作系统崩溃时防止数据丢失,那么这样做是错误的。还有其他需要权衡的地方(比如总是使用磁盘或外部数据存储的开销),因为在操作系统崩溃的过程中,冲到磁盘上更有可能损坏或破坏所有数据,而不是允许您保存最新的数据。

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

https://stackoverflow.com/questions/26711718

复制
相关文章

相似问题

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