我遇到了一个问题,我无法在程序中停止mnesia而不会导致应用程序挂起。当mnesia从程序中停止时,停止Erlang应用程序挂起
我目前正在做我的erlang应用程序中mnesia的原型。
在我jaus_app.erl文件中的开始()调用:
{atomic, ok} = mnesia:load_textfile("priv/mnesia_prototype.txt")
我stop()函数调用:
mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"),
mnesia:stop(),
当我注释掉这些行,并开始从停止的Mnesia erlang提示,我可以干净地停止我的应用程序。
我不应该在完全成熟的erlang应用程序中使用这些原型函数吗?
Ken。
发生这种情况的原因是您的'stop'函数是从应用程序控制器调用的,该函数是'gen_server',而mnesia:stop'调用'application:stop(mnesia)',并等待来自应用程序控制器的响应 - 你有一个僵局。所以,简单的答案是“不要在该回调函数中使用mnesia:stop'”;我没有更好的建议,但:) – legoscia 2010-08-13 15:05:41