當Pid死亡時,它釋放與其關聯的所有文件句柄/端口。如果進程即將死亡,我應該打擾如gen_tcp:close或ssl:close這樣的操作,即使它是最後一件事情?如果Pid即將死亡,我應該打擾關閉套接字連接嗎?
4
A
回答
7
「我應該打擾」你的意思是,「我會冒內存泄漏嗎?」,或者「會導致數據丟失嗎?」,還是「影響客戶端看到和關閉連接的方式?
也就是說,出於客戶的考慮,發佈close命令被認爲是禮貌的。客戶端可能會在連接中看到突然中斷,而不是關閉。例如,如果它是一個web服務器,並且您發送關閉請求而不是,那麼某些瀏覽器會將其作爲管道中斷(錯誤)讀取,並立即嘗試重新連接。正確地關閉連接只是禮貌的,它將有助於保持您的代碼的邏輯組織(您知道正好您的所有資源如何處理)。
我不是100%確定erlang如何處理垃圾回收,但我可以說對於大多數編程語言(因此我假設erlang也是這樣),殺死進程將處理所有的與它相關聯的內存,所以應該沒有內存泄漏只是讓進程死亡。
但是,如果緩衝區中有潛在內容發送給客戶端,則可能希望使您的退出過程在關閉之前刷新緩衝區或連接,否則可能會導致數據丟失。
編輯:如legoscia提到,任何打開的文件描述符應該從容通過二郎處理,但它絕不會傷害(我把它叫做「良好做法」)退出進程之前,自己關閉它們。
相關問題
- 1. 如何關閉被死亡程序打開的套接字?
- 2. 關閉套接字連接
- 3. 我應該關閉makefile'ed套接字,它是獨立的原始套接字嗎?
- 4. 我應該在Python中顯式關閉zeromq套接字嗎?
- 5. 我應該關閉兩端的套接字嗎?
- 6. 你應該總是關閉連接嗎?
- 7. 如何關閉PrimeFaces套接字連接
- 8. 如何關閉並清理死亡(殭屍)連接?
- 9. 我應該打開和關閉每個事務的套接字嗎?
- 10. 我需要關閉套接字嗎?
- 11. 如何關閉套接字,如果它正在監聽連接
- 12. 監聽套接字死亡意外
- 13. Java套接字服務器死亡
- 14. 如果發送太多數據,Web套接字關閉連接
- 15. 誰關閉了套接字連接
- 16. 用PHP關閉套接字連接
- 17. java.net.SocketException:套接字已關閉TCP連接
- 18. 套接字連接不會關閉?
- 19. 我應該關閉我的數據庫連接嗎?
- 20. .NET Remoting套接字不會死亡,即使在進程之後
- 21. 如果連接了jquery-ui.js,我應該連接jquery-ui.css嗎?
- 22. 是否ServerSocket.close()應該關閉所有打開的套接字?
- 23. Netty:如果它是'保持活動'連接,我應該關閉頻道嗎?
- 24. Chrome - 禁用Web套接字或關閉Web套接字連接?
- 25. 關閉套接字後,套接字連接保持ESTABLISHED
- 26. 爲什麼我應該關閉或保持Redis連接打開?
- 27. 我應該在收到304後關閉代理連接嗎?
- 28. 我應該明確關閉RethinkDB連接嗎?
- 29. 我應該關閉方法調用之間的mySQL連接嗎?
- 30. 我應該關閉來自數據源的連接嗎?
請記住,Erlang「進程」與OS「進程」不同,並且Erlang運行時可以在一個OS進程中運行許多Erlang進程。 – 2012-08-13 01:50:56
但是Erlang進程的行爲卻類似:所有內存在進程活動結束時被釋放 – 2012-08-13 09:45:06
當涉及套接字時,您還需要避免泄漏文件描述符。我*想*愛爾蘭照顧你,但如果我完全確定,我會張貼作爲回答:) – legoscia 2012-08-13 16:10:05