相信你做得很好。
我需要在erlang运行时捕获SIGTERM,这样我就可以将ets的状态保存到dets文件中&当系统再次启动时,它将从停止的点开始。我可以编写一个C程序来捕获SIGTERM,但是VM也会捕获相同的信号。现在,我如何让ERLANG忽略SIGTERM,这样只有我的C程序才能捕捉到信号,并将它传递给erlang,这样它就可以在退出ting之前保存状态。
发布于 2014-11-03 10:43:55
简单的解决方案:不要将SIGTERM发送到任何Erlang进程。只将它发送到C程序,并让它充当您的Erlang程序的信号监听器,它知道如何与之交谈。传统的方法是让C程序在启动时编写PID,然后编写shell命令,从某个临时文件读取C进程的PID。关机shell命令不需要知道任何关于Erlang的信息。
不过,有更好的方法来处理这件事。你为什么要等SIGTERM?如果您在*nix系统上运行一个始终打开的服务,那么您应该有与系统一起工作的启动和关闭脚本。这些命令可以发送“干净关机”命令给您的Erlang服务,无论您想如何编写它们(例如,它们可能是或调用脚本本身)。
但是,如果您试图在操作系统崩溃时防止数据丢失,那么这样做是错误的。还有其他需要权衡的地方(比如总是使用磁盘或外部数据存储的开销),因为在操作系统崩溃的过程中,冲到磁盘上更有可能损坏或破坏所有数据,而不是允许您保存最新的数据。
https://stackoverflow.com/questions/26711718
复制相似问题