Elixir 退出
2023-12-16 20:47 更新
进程中运行的所有Elixir代码都会互相交流.当一个进程因"自然原因"(未处理的异常)死亡时,就会发送一个exit
信号.直接发送一个退出信号也会让进程死亡:
iex> spawn_link fn -> exit(1) end
#PID<0.56.0>
** (EXIT from #PID<0.56.0>) 1
上述例子中,链接的进程死了,是因为发送了一个值为1的exit
信号.Elixir壳自动处理了这些信息并将其打印到终端.
exit
也可以被try/catch
"捕获":
iex> try do
...> exit "I am exiting"
...> catch
...> :exit, _ -> "not really"
...> end
"not really"
使用try/catch
已经很不常见,用它来捕获退出就更少见了.
exit
信号是由Erlang VM提供的容错系统中重要的部分.进程通常在监督树下运行,这些树是自己处理的,只是等待来自监督过程中的退出信号.一旦接收到了退出信号,监督策略将启动,并重启监督进程.
正是由于监督系统的存在,使得try/catch
与try/rescue
结构在Elixir中如此少见.语气解救一个错误,我们更愿意"快速失败",因为监督树会保证我们的应用能够在出错之后回到一个已知的初始状态.
以上内容是否对您有帮助:
更多建议: