trap_exit cannot trap signal when exit/1 doesn't called explicitly
lang er
erlangist@REDACTED
Tue Aug 22 18:22:29 CEST 2006
I run the example link_demo(page 103) in Erlang book:
-module(link_demo).
%%
%% Include files
%%
%%
%% Exported Functions
%%
-export([start/0,demo/0,demonstrate_normal/0,
demonstrate_exit/1,
demonstrate_error/0,demonstrate_message/1]).
%%
%% API Functions
%%
start() ->
register(demo, spawn(link_demo, demo, [])).
demo() ->
process_flag(trap_exit, true),
demo1().
demo1() ->
receive
{'EXIT', From, normal} ->
io:format("Demo process received normal exit from ~w~n",
[From]),
demo1();
{'EXIT', From, Reason} ->
io:format("Demo process received exit signal ~w from ~w~n",
[Reason, From]),
demo1();
finished_demo ->
io:format("Demo finished ~n", []);
Other ->
io:format("Demo process message ~w~n", [Other]),
demo1()
end.
%%
%% Local Functions
%%
demonstrate_normal() ->
link(whereis(demo)).
demonstrate_exit(What) ->
link(whereis(demo)),
exit(What).
demonstrate_message(What) ->
demo ! What.
demonstrate_error()->
link(whereis(demo)),
1 = 2.
-----------
After start(), I call demonstrate_normal(), demo process should trap the
exit(normal) signal, but it doesn't,
and if I call demonstrate_exit(normal) , demo do trap the exit(normal).
The only difference between theses two situations is the exiting process
call exit/1 explicitly.
Must I call exit before existing ?
My environment: MacBook(Intel)
Erlang (BEAM) emulator version 5.5 [source] [async-threads:0]
Eshell V5.5 (abort with ^G)
1>
Thanks!
Best Regards
James
-------------- next part --------------
An HTML attachment was scrubbed...
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20060823/8c59918a/attachment.htm>
More information about the erlang-questions
mailing list