您能举例说明Erlang主管重启进程的示例吗?如果进程终止,它将重新启动。但是一个过程怎么死? 感谢。
答案 0 :(得分:1)
您可以将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>
1&GT;第一个命令要求shell提示自己的Pid:<0.32.0>
。
2 - ;接下来,一个新命令将变量A设置为1,它起作用,因为A是未绑定的。
3&GT;对shell的新请求显示其Pid没有变化。
4&GT;尝试将A与整数2匹配失败,它会引发异常。事实上,在后台,shell进程终止,主管立即重新启动它。
5个可以通过新的请求来验证它获取shell Pid,现在它是<0.37.0>
。
6个当shell死亡时,它丢失了所有信息,并从头开始重新启动。但在初始化期间,它可以连接到负责保存会话历史的所有其他进程以及所有绑定变量。可以通过询问A:
的值来验证6> A.
1
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
根据环境(硬件故障,通信丢失,错误参数,错误......),erlang进程可能因错误原因而死亡。如果它在监督树(或您自己的监控)中进行管理,则可以从头开始重新启动。应用程序有责任为所有流程提供恢复适当状态的方法。
erlang进程也可能因为&#34; normal&#34;而死,例如当用户关闭会话时(在shell中键入q()。),在这种情况下,主管不会重启它
您可以在网上找到许多有价值的信息:
learn you some erlang : run time errors