[erlang-questions] Re: [erlang-bugs] Re: Re: [erlang-questions] Erlang's process not killed by exit signalreasoned by "kill"
Tony Rogvall
tony@REDACTED
Thu Oct 29 14:15:44 CET 2009
Just to clarify some details about exit signals and trap_exit problems.
You can fake exit signals if the process is trapping exits (Also the
name of a web site ;-)
In the code below this is illustrated by starting a process that trap
exits. Then either do
a exit(P, foo) in test1 or P ! {'EXIT',self(),foo} in test2. Also note
that setting the process_flag(trap_exit,true)
must be synchronized!!! (yes I stumbled right into it ;-)
Trap exits should be avoided when not 100% designed into the solution.
/Tony
-module(trap).
-compile(export_all).
start() ->
Main = self(),
P = spawn(fun() ->
process_flag(trap_exit, true),
Main ! ok,
receive {'EXIT',From,Reason} ->
io:format("Exit: ~p ~p\n",[From,Reason])
end
end),
receive
ok -> P
end.
test1() ->
P = start(),
exit(P, foo).
test2() ->
P = start(),
P ! {'EXIT',self(),foo}.
On 29 okt 2009, at 10.57, Ulf Wiger wrote:
> Joe Armstrong wrote:
>>
>> The distinction between messages and signals is subtle.
>
> One way to verify that it is indeed as Joe says:
>
> Eshell V5.6.5 (abort with ^G)
> 1> P = spawn(fun() -> timer:sleep(infinity) end).
> <0.32.0>
> 2> P ! {'EXIT',self(),foo}.
> {'EXIT',<0.30.0>,foo}
> 3> is_process_alive(P).
> true
> 4> exit(P,foo).
> true
> 5> is_process_alive(P).
> false
> 6>
>
> In other words, you cannot fake an exit signal by sending
> an {'EXIT',P,R} message.
>
> BR,
> Ulf W
> --
> Ulf Wiger
> CTO, Erlang Training & Consulting Ltd
> http://www.erlang-consulting.com
>
> ________________________________________________________________
> erlang-questions mailing list. See http://www.erlang.org/faq.html
> erlang-questions (at) erlang.org
>
More information about the erlang-questions
mailing list