gen_server
belgeleri aldığında sona çağırmaz diyor ki: bir alırsaEğiticisiz gen_server o <code>Module:terminate</code> Geri aramada çıkış sinyalini
, bu fonksiyon denir Ebeveyninden 'EXIT' mesajı. Sebep, 'EXIT' mesajındakiyle aynıdır. Ben
gen_server:start
kullanarak bu sunucuyu başlatmakhandle_info(UnknownMessage, State) -> io:format("Got unknown message: ~p~n", [UnknownMessage]), {noreply, State}. terminate(Reason, State) -> io:format("Terminating with reason: ~p~n", [Reason]).
:
İşte benim handle_info
ve terminate
fonksiyonudur. erlang:exit(Pid, fuckoff)
'u aradığımda, terminate
geri arama işlevini çağırmalıyım. Ama gösterir:
Got unknown message: {'EXIT',<0.33.0>,fuckoff}
o handle_info
çağırıyor demek oluyor. Ama ben gen_server:stop
'u aradığımda, her şey belgelerinde belirtildiği gibi çalışır. gen_server
telefonumu kabuktan arıyorum. Bunu açıklığa kavuşturur musun?
[UPDATE]
Heregen_server
içinde decode_msg
fonksiyonunun kaynak kodu. o terminate
işlevini çağırmaz Benim durumumda
decode_msg(Msg, Parent, Name, State, Mod, Time, Debug, Hib) ->
case Msg of
{system, From, Req} ->
sys:handle_system_msg(Req, From, Parent, ?MODULE, Debug,
[Name, State, Mod, Time], Hib);
{'EXIT', Parent, Reason} ->
terminate(Reason, Name, Msg, Mod, State, Debug);
_Msg when Debug =:= [] ->
handle_msg(Msg, Parent, Name, State, Mod);
_Msg ->
Debug1 = sys:handle_debug(Debug, fun print_event/3,
Name, {in, Msg}),
handle_msg(Msg, Parent, Name, State, Mod, Debug1)
end.
: o herhangi bir 'ÇIKIŞ' mesajı alırsa o terminate
işlevini çağırmalıdır.
[GÜNCELLEME]
Ben gen_server
beklenen bir davranıştır işlevi terminate
çağrıyı geri çağırma neden olacaktır erlang:exit(Pid, Reason)
kullanarak bir çıkış sinyali göndererek, gen_server:start_link()
kullanmaya başlamak. Bir sürecin ebeveyne bağlı olup olmadığı bir çıkış sinyalini yorumlamada bir fark var gibi görünüyor.
"trap_exit" işlem bayrağını kodda "true" olarak ayarladınız mı? –
Evet. İç init işlevi. –