[erlang-questions] Erlang shell, process dictionary & rand:seed

Raimo Niskanen <>
Thu Jan 12 13:43:52 CET 2017


On Thu, Jan 12, 2017 at 09:58:06AM +0000, Roger Lipscombe wrote:
> On 12 January 2017 at 08:41, Raimo Niskanen
> <> wrote:
> > It is a shell feature.
> >
> > Notice below - an "** exception error:" is different from
> > "*** Shell process terminated! ***".  1/0 is as well as most other
> > exceptions is caught by the evaluator so the process will not exit.
> 
> Except that the process *does* exit (note that my shell displays the
> pid in the prompt, but I've added self() calls to be clear):
> 
> Erlang/OTP 17 [erts-6.4.1.2] [source-73fc7ca] [64-bit] [smp:12:12]
> [async-threads:10] [hipe] [kernel-poll:false]
> 
> Eshell V6.4.1.2  (abort with ^G)
> <0.33.0> 1> self().
> <0.33.0>
> <0.33.0> 2> put(a, 1).
> undefined
> <0.33.0> 3> get().
> [{a,1}]
> <0.33.0> 4> 1/0.
> ** exception error: an error occurred when evaluating an arithmetic expression
>      in operator  '/'/2
>         called as 1 / 0
> <0.38.0> 5> self().
> <0.38.0>
> <0.38.0> 6> get().
> [{a,1}]

Well, how about that!?

The shell does strange things.  It is for example divided into two
processes; one evaluator process and one other process that I think for
instance owns links, receives messages, etc.

It seems the shell emulates what I said i.e that an exception was caught,
but the process receiving messages actually died due to the exception.

Confusing.  I wonder if it is possible to correct...?

Nevertheless, if a non-emulated process dies due to a runtime error e.g
division by zero, its process dictionary, links and other process stuff
dies with it.

-- 

/ Raimo Niskanen, Erlang/OTP, Ericsson AB


More information about the erlang-questions mailing list