<div dir="ltr">This stuff has been up several times before. Here's one from 2009 where I looked into it:<div><a href="http://erlang.org/pipermail/erlang-questions/2009-October/047190.html">http://erlang.org/pipermail/erlang-questions/2009-October/047190.html</a><br></div><div><br></div><div>Then there's this one from 2010 where Robert answered: <a href="http://erlang.org/pipermail/erlang-questions/2010-December/055003.html">http://erlang.org/pipermail/erlang-questions/2010-December/055003.html</a></div><div><br></div><div>And here's one from 2015 started by Robert: <a href="http://erlang.org/pipermail/erlang-questions/2015-October/086289.html">http://erlang.org/pipermail/erlang-questions/2015-October/086289.html</a></div><div><br></div><div> /Richard</div><div><br></div></div><div class="gmail_extra"><br clear="all"><div><div class="gmail_signature" data-smartmail="gmail_signature"><br> /Richard</div></div>
<br><div class="gmail_quote">2017-05-05 14:32 GMT+02:00 Robert Virding <span dir="ltr"><<a href="mailto:rvirding@gmail.com" target="_blank">rvirding@gmail.com</a>></span>:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div dir="ltr"><div><div>Yes, and no. When a process dies with a reason then that reason is sent in a signal to all the processes in the link set. So if the process dies with the reason 'foo' then a 'foo' exit signal will be sent, and if I do exit/2 to send a 'foo' exit signal then a 'foo' exit signal will be sent. In both cases, if the receiving process is not trapping it will die with the reason 'foo' [*] and if the receiving process is trapping then the exit signal will be converted to a message with reason 'foo'. In both cases it IS a 'foo' exit signal.<br><br></div>However, if the exit reason is 'kill' then the 'kill' exit signal sent from the process will be trapped while if it is sent with exit/2 it is not trappable. THIS IS THE ONLY EXIT SIGNAL WHICH BEHAVES DIFFERENTLY! [**]<br><br></div><div>Again where's the logic in that? Why the inconsistency? We tried hard back in the old days to be consistent.<br></div><div><br></div><div>Robert<br><br></div><div>* As 'foo' is not the value 'normal' it will kill the process.<br></div>**Sorry of raising my voice.<br><br></div><div class="HOEnZb"><div class="h5"><div class="gmail_extra"><br><div class="gmail_quote">On 5 May 2017 at 14:08, Alex S. <span dir="ltr"><<a href="mailto:alex0player@gmail.com" target="_blank">alex0player@gmail.com</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex">There is exit/1 and exit/2 which are very, very different things. exit/1 is NOT an exit signal.<br>
There is no “kill and kill”, there is exit signal kill, which is special, and exit reason kill, which is not special.<br>
> 5 мая 2017 г., в 15:05, Robert Virding <<a href="mailto:rvirding@gmail.com" target="_blank">rvirding@gmail.com</a>> написал(а):<br>
<div class="m_5851223394701358645HOEnZb"><div class="m_5851223394701358645h5">><br>
> There is more. So:<br>
><br>
> 1> process_flag(trap_exit, true).<br>
> false<br>
> 2> Pid = spawn_link(fun() -> process_flag(trap_exit,true), timer:sleep(infinity) end).<br>
> <0.60.0><br>
><br>
> We trap exits and spawn_link which also traps exits and just hangs there waiting.<br>
><br>
> 3> spawn(fun() -> link(Pid), exit(kill) end).<br>
> <0.62.0><br>
> 4> process_info(Pid, messages).<br>
> {messages,[{'EXIT',<0.62.0>,ki<wbr>ll}]}<br>
><br>
> Now we spawn a new process which links to our hanger and exits with the reason 'kill'. We can then check our hanger and see that it received a 'kill' signal which it converted to a message because it was trapping. Finally:<br>
><br>
> 5> spawn(fun() -> exit(Pid, kill) end).<br>
> <0.65.0><br>
> 6> flush().<br>
> Shell got {'EXIT',<0.60.0>,killed}<br>
> ok<br>
><br>
> we spawn another process which uses exit/2 to send a 'kill' signal to our hanger and in this case it cannot trap the signal and dies with the reason 'killed'. So there is 'kill' and 'kill' depending on how I send it.<br>
><br>
> Where's the logic in that?<br>
><br>
> Robert<br>
><br>
> P.S. Yes, I know that getting a 'killed' from a process which has been killed with a 'kill' signal is the correct.<br>
><br>
</div></div><div class="m_5851223394701358645HOEnZb"><div class="m_5851223394701358645h5">> ______________________________<wbr>_________________<br>
> erlang-questions mailing list<br>
> <a href="mailto:erlang-questions@erlang.org" target="_blank">erlang-questions@erlang.org</a><br>
> <a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/list<wbr>info/erlang-questions</a><br>
<br>
</div></div></blockquote></div><br></div>
</div></div><br>______________________________<wbr>_________________<br>
erlang-questions mailing list<br>
<a href="mailto:erlang-questions@erlang.org">erlang-questions@erlang.org</a><br>
<a href="http://erlang.org/mailman/listinfo/erlang-questions" rel="noreferrer" target="_blank">http://erlang.org/mailman/<wbr>listinfo/erlang-questions</a><br>
<br></blockquote></div><br></div>