Erlang supervision中的进程何时重新启动?

Erlang supervision中的进程何时重新启动?,erlang,Erlang,您能举一些例子说明Erlang supervisor重新启动进程的情况吗。如果进程死亡,它将重新启动。但一个过程是如何消亡的? 谢谢。 你可以以Erlang shell中发生的例子为例,考虑序列: 1> self(). <0.32.0> 2> A = 1. 1 3> self(). <0.32.0> 4> A = 2. ** exception error: no match of right hand side value 2 5> s

您能举一些例子说明Erlang supervisor重新启动进程的情况吗。如果进程死亡,它将重新启动。但一个过程是如何消亡的?

谢谢。

你可以以Erlang shell中发生的例子为例,考虑序列:

1> self().
<0.32.0>
2> A = 1. 
1
3> self().
<0.32.0>
4> A = 2. 
** exception error: no match of right hand side value 2
5> self().
<0.37.0>
7> 或者通过询问历史

7> h().
1: self()
-> <0.32.0>
2: A = 1
-> 1
3: self()
-> <0.32.0>
4: A = 2
-> {'EXIT',{{badmatch,2},[{erl_eval,expr,3,[]}]}}
5: self()
-> <0.37.0>
6: A
7>h()。
1:self()
-> 
2:A=1
-> 1
3:self()
-> 
4:A=2
->{'EXIT',{{badmatch,2},[{erl_eval,expr,3,[]}
5:self()
-> 
6:A
根据环境的不同(硬件故障、通信中断、参数错误、bug…),erlang进程可能会因错误而死亡。如果在监控树(或您自己的监控)中对其进行管理,则可以从头开始重新启动。应用程序负责向所有进程提供恢复适当状态的方法

erlang进程也可能因“正常”而死亡,例如,当用户关闭会话(在您键入q()的shell中)时,在这种情况下,主管将不会重新启动它

您将在web上找到许多有价值的信息:

7> h().
1: self()
-> <0.32.0>
2: A = 1
-> 1
3: self()
-> <0.32.0>
4: A = 2
-> {'EXIT',{{badmatch,2},[{erl_eval,expr,3,[]}]}}
5: self()
-> <0.37.0>
6: A