2010-08-13 8 views
5

앱이 멈추지 않고 내 프로그램에서 mnesia를 멈출 수없는 문제가 발생했습니다.프로그램에서 mnesia가 멈췄을 때 Erlang 앱이 멈 춥니 다.

현재 내 erlang 앱에서 mnesia의 프로토 타이핑을하고 있습니다. 내 jaus_app.erl (시작 파일)에서

호출 :

{atomic, ok} = mnesia:load_textfile("priv/mnesia_prototype.txt") 

내 정지() 함수를 호출

mnesia:dump_to_textfile("priv/mnesia_prototype_res.txt"), 
mnesia:stop(), 

나는이 줄을 주석하고 시작하고부터 mnesia를 중지하면 에를린 프롬프트, 나는 나의 신청을 깨끗하게 멈출 수있다.

본격적인 erlang 앱에서 이러한 프로토 타입 기능을 사용하지 않아야합니까?

켄. 얼랭 문서에서

+5

'stop' 함수가'gen_server' 인 응용 프로그램 컨트롤러에서 호출 되었기 때문에 발생합니다. 그러나'mnesia : stop'은'application : stop (mnesia)'를 호출하고 응용 프로그램 컨트롤러로부터의 응답을 기다립니다. 교착 상태에 빠졌습니다. 그래서 간단한 대답은 "해당 콜백 함수에서'mnesia : stop'을 사용하지 마십시오."; 나는 훨씬 더 좋은 제안이 없다. :) – legoscia

답변

2

부팅 파일을 만들 때 systools를 사용하면 mnesia가 내 앱보다 먼저 시작되고 시스템 종료시 내 앱이 중지됩니다. 이것은 위에있는 legoscia에 의해 암시 된 걸려있는 문제를 해결합니다. 부팅 파일 아이디어는 Mazen이 erlang 컨설팅에서 제안했습니다. 그 제안에 대해 그에게 많은 감사드립니다.

1

:

dump_to_textfile (파일 이름) : (일반 텍스트 편집기를 이용하여) 다음 편집 할 수있는 텍스트 파일로 mnesia 시스템의 모든 지역 테이블을 덤프 그리고 나중에 mnesia와 함께 을 다시로드하십시오 : load_textfile/1. 교육용으로 만이 기능을 사용하십시오. 다른 기능을 사용하여 을 실제 백업으로 처리하십시오.

관련 문제