W3Cschool
恭喜您成為首批注冊用戶
獲得88經(jīng)驗值獎勵
進程中運行的所有Elixir代碼都會互相交流.當一個進程因"自然原因"(未處理的異常)死亡時,就會發(fā)送一個?exit
?信號.直接發(fā)送一個退出信號也會讓進程死亡:
iex> spawn_link fn -> exit(1) end
#PID<0.56.0>
** (EXIT from #PID<0.56.0>) 1
上述例子中,鏈接的進程死了,是因為發(fā)送了一個值為1的?exit
?信號.Elixir殼自動處理了這些信息并將其打印到終端.
?exit
?也可以被?try/catch
?"捕獲":
iex> try do
...> exit "I am exiting"
...> catch
...> :exit, _ -> "not really"
...> end
"not really"
使用?try/catch
?已經(jīng)很不常見,用它來捕獲退出就更少見了.
?exit
?信號是由Erlang VM提供的容錯系統(tǒng)中重要的部分.進程通常在監(jiān)督樹下運行,這些樹是自己處理的,只是等待來自監(jiān)督過程中的退出信號.一旦接收到了退出信號,監(jiān)督策略將啟動,并重啟監(jiān)督進程.
正是由于監(jiān)督系統(tǒng)的存在,使得?try/catch
?與?try/rescue
?結構在Elixir中如此少見.語氣解救一個錯誤,我們更愿意"快速失敗",因為監(jiān)督樹會保證我們的應用能夠在出錯之后回到一個已知的初始狀態(tài).
Copyright©2021 w3cschool編程獅|閩ICP備15016281號-3|閩公網(wǎng)安備35020302033924號
違法和不良信息舉報電話:173-0602-2364|舉報郵箱:jubao@eeedong.com
掃描二維碼
下載編程獅App
編程獅公眾號
聯(lián)系方式:
更多建議: