您可以舉一些Erlang主管重新啓動進程的示例。如果一個進程死了,它會重新啓動。但是一個過程如何死亡?
謝謝。何時在Erlang監督下重新啓動進程?
-3
A
回答
2
你可以採取爲例在Erlang的外殼會發生什麼,比如考慮序列:
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>第一條命令要求給shell提示自己的PID:<0.32.0>
。
2>接下來一個新的命令將變量A設置爲1,它起作用,因爲A是未綁定的。
3>對shell的新請求顯示其Pid沒有更改。
4>試圖匹配A與整數2失敗,它引發一個異常。事實上,在後臺,shell進程死亡,並且一個主管立即重啓它。
5>可以通過一個新的請求來驗證shell Pid,現在它是<0.37.0>
。
6>當shell死亡時,它已經丟失了所有信息,並且從頭開始重新啓動。但在初始化期間,它可以連接到負責保存會話歷史的所有其他進程以及所有綁定變量。它可以通過詢問的值進行驗證:
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進程也可能因爲「正常」而死亡,例如,當用戶關閉會話時(在shell中鍵入q()。),在這種情況下,超級用戶將不會重新啓動它。
你會發現在網絡上許多有價值的信息:
learn you some erlang : run time errors
相關問題
- 1. erlang監督員重新啓動策略
- 2. 監督Erlang/OTP監督行爲中的普通進程
- 3. 監督重啓過程
- 4. Erlang:誰來監督監督員?
- 5. Erlang監督node.js實例
- 6. 龍捲風不在監督員身上重新啓動
- 7. 監督樹未能啓動
- 8. 通過腳本啓動監督員的問題 - Erlang
- 9. Erlang - 從監督模塊中啓動一個孩子
- 10. Erlang如何監督多個模塊
- 11. 當失敗/退出時監控並重新啓動子進程
- 12. 設計用於監視和重新啓動進程的監視進程
- 13. 理解Erlang/Elixir的監督職責
- 14. 重新啓動erlang進程並保留狀態
- 15. 如何重新啓動erlang節點?
- 16. Golang:如何在二進制更新時自動重啓進程?
- 17. 如何在重新進入活動時重新啓動CountDownTimer
- 18. Akka監督管理監督
- 19. 受監督或無監督
- 20. Erlang監督員,一個重要的孩子
- 21. 監視程序並在崩潰時重新啓動它
- 22. 如何重新啓動腳本,如果它停止工作,但仍然顯示爲在監督員下運行
- 23. 啓動監督員啓動後的動態simple_one_for_one工作人員
- 24. 製作服務監視器並重新啓動進程
- 25. 何時使用有監督或無監督學習?
- 26. 啓動時啓動Erlang。
- 27. 如何重新啓動Node.js子進程
- 28. 在mod_wsgi守護進程'重新啓動
- 29. 在Windows中重新啓動進程[exe]
- 30. Erlang主管不重新啓動孩子