当mnesia从程序内停止时,Erlang应用程序的停止挂起
我遇到了一个问题,我无法在程序中停止mnesia而不会导致应用程序挂起 我目前正在我的erlang应用程序中进行mnesia的原型制作 在我的jaus_app.erl文件中,start()调用: My stop()函数调用:当mnesia从程序内停止时,Erlang应用程序的停止挂起,erlang,mnesia,Erlang,Mnesia,我遇到了一个问题,我无法在程序中停止mnesia而不会导致应用程序挂起 我目前正在我的erlang应用程序中进行mnesia的原型制作 在我的jaus_app.erl文件中,start()调用: My stop()函数调用: mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"), mnesia:stop(), 当我注释掉这些行,并从erlang提示符启动和停止mnesia时,我就能够完全停止我的应用程序 我不应该在成熟的erlang应
mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"),
mnesia:stop(),
当我注释掉这些行,并从erlang提示符启动和停止mnesia时,我就能够完全停止我的应用程序
我不应该在成熟的erlang应用程序中使用这些原型函数吗
肯。来自erlang文档:
转储到文本文件(文件名):
转储mnesia的所有本地表
系统转换成一个文本文件,然后
(通过普通文本)进行编辑
编辑器),然后重新加载
使用mnesia:load_textfile/1仅限使用
此功能用于教育
目的。使用其他函数来处理
有真正的备份
通过使用systools创建引导文件,mnesia在我的应用程序关闭之前启动,在我的应用程序关闭之后停止。这解决了上面Legosca提到的悬挂问题。启动文件的想法是由erlang咨询公司的Mazen提出的。非常感谢他的建议。之所以会出现这种情况,是因为应用程序控制器调用了
stop
函数,而应用程序控制器是gen\u服务器
,但是mnesia:stop
调用application:stop(mnesia)
,并等待应用程序控制器的响应,并且出现死锁。因此,简单的答案是“不要在回调函数中使用mnesia:stop
”;不过,我没有更好的建议:)
mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"),
mnesia:stop(),