Eralng ETS消失
文章目录
问题1
使用-remsh连接到节点,重新装载配置数据(会创建ETS),结束后,发现存放配置数据的ETS不见了。
原因
ETS虽不会参与GC,但当调用ets:delete(ets_name),或创建ETS进程结束,ETS会被销毁。结束Erlang Shell会话时,创建ETS的进程结束,所有由它创建的ETS也会消失。
问题2
使用-remsh连接到节点,在Erlang Shell 中执行函数装载配置数据,执行一些语句导致有异常(如1/0),也会发现存放配置数据的ETS不见了。
原因
Erlang Shell遇到异常,会重新创建一个Shell,相当于重新创建1个进程。原来的进程结束,由它创建的ETS也会消失。
解决方法
-
在长期不会退出的进程创建ETS。
-
使用 ets:new(ets_name, [named_table,{heir,HP,[]}]). 创建ETS。
当创建ETS进程结束,进程号位HP的进程继承该ETS。
-
移交拥有权
ets:give_away(ets_name, P, []).
参见
文章作者 xyr
上次更新 2015-05-13