我遇到了一個問題,我無法在程序中停止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