<div dir="ltr"><div><div>Not quite, it is really 3 processes: a "master" process which keeps track of the others; an evaluator process which does all the work; and a process which reads the inputs. It is the evaluator process which crashes when there is an error and it is the one which receives messages and is linked. The shell master does not keep track of the evaluator's links so when it dies they all go away.<br><br>Erlang/OTP 19 [erts-8.0] [source-6dc93c1] [64-bit] [smp:8:8] [async-threads:10] [hipe] [kernel-poll:false]<br><br>Eshell V8.0  (abort with ^G)<br>1> self().<br><0.57.0><br>2> process_info(self(), links).<br>{links,[<0.51.0>]}<br>3> link(whereis(error_logger)).<br>true<br>4> process_info(self(), links).<br>{links,[<0.51.0>,<0.30.0>]}<br>5> exit(die_die_die).<br>** exception exit: die_die_die<br>6> self().                     <br><0.63.0><br>7> process_info(self(), links).<br>{links,[<0.51.0>]}<br>8> link(whereis(error_logger)).<br>true<br>9> process_info(self(), links).<br>{links,[<0.51.0>,<0.30.0>]}<br>10> exit(normal).<br>** exception exit: normal<br>11> self().                     <br><0.69.0><br>12> process_info(self(), links).<br>{links,[<0.51.0>]}<br>13> <br><br></div>But yes, the shell master keeps track of the process dictionary and the variable bindings and passes them on to the next evaluator process.<br><br>The evaluator process does nothing special to catch errors and quite happily just dies when there is an error as it knows the master process will handle. It's the "let it crash" philosophy even here.<br><br></div>Robert<br><br></div><div class="gmail_extra"><br><div class="gmail_quote">On 12 January 2017 at 13:43, Raimo Niskanen <span dir="ltr"><<a href="mailto:raimo+erlang-questions@erix.ericsson.se" target="_blank">raimo+erlang-questions@erix.ericsson.se</a>></span> wrote:<br><blockquote class="gmail_quote" style="margin:0 0 0 .8ex;border-left:1px #ccc solid;padding-left:1ex"><div class="HOEnZb"><div class="h5">On Thu, Jan 12, 2017 at 09:58:06AM +0000, Roger Lipscombe wrote:<br>
> On 12 January 2017 at 08:41, Raimo Niskanen<br>
> <<a href="mailto:raimo%2Berlang-questions@erix.ericsson.se">raimo+erlang-questions@erix.<wbr>ericsson.se</a>> wrote:<br>
> > It is a shell feature.<br>
> ><br>
> > Notice below - an "** exception error:" is different from<br>
> > "*** Shell process terminated! ***".  1/0 is as well as most other<br>
> > exceptions is caught by the evaluator so the process will not exit.<br>
><br>
> Except that the process *does* exit (note that my shell displays the<br>
> pid in the prompt, but I've added self() calls to be clear):<br>
><br>
> Erlang/OTP 17 [erts-6.4.1.2] [source-73fc7ca] [64-bit] [smp:12:12]<br>
> [async-threads:10] [hipe] [kernel-poll:false]<br>
><br>
> Eshell V6.4.1.2  (abort with ^G)<br>
> <0.33.0> 1> self().<br>
> <0.33.0><br>
> <0.33.0> 2> put(a, 1).<br>
> undefined<br>
> <0.33.0> 3> get().<br>
> [{a,1}]<br>
> <0.33.0> 4> 1/0.<br>
> ** exception error: an error occurred when evaluating an arithmetic expression<br>
>      in operator  '/'/2<br>
>         called as 1 / 0<br>
> <0.38.0> 5> self().<br>
> <0.38.0><br>
> <0.38.0> 6> get().<br>
> [{a,1}]<br>
<br>
</div></div>Well, how about that!?<br>
<br>
The shell does strange things.  It is for example divided into two<br>
processes; one evaluator process and one other process that I think for<br>
instance owns links, receives messages, etc.<br>
<br>
It seems the shell emulates what I said i.e that an exception was caught,<br>
but the process receiving messages actually died due to the exception.<br>
<br>
Confusing.  I wonder if it is possible to correct...?<br>
<br>
Nevertheless, if a non-emulated process dies due to a runtime error e.g<br>
division by zero, its process dictionary, links and other process stuff<br>
dies with it.<br>
<span class="im HOEnZb"><br>
--<br>
<br>
/ Raimo Niskanen, Erlang/OTP, Ericsson AB<br>
</span><div class="HOEnZb"><div class="h5">______________________________<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>
</div></div></blockquote></div><br></div>