当 Pid 死亡时,它会释放与其关联的所有文件句柄/端口。如果进程即将终止,我是否应该打扰调用类似 gen_tcp:close 或 ssl:close 之类的东西,即使它是它所做的最后一件事?
问问题
555 次
1 回答
8
“我应该打扰”是指“我会冒内存泄漏的风险吗?”或“它会导致数据丢失吗?”或“它会影响客户端查看和关闭连接的方式吗?”
话虽如此,为了客户的利益,发出关闭命令被认为是礼貌的。客户端可能会看到连接突然中断而不是关闭。例如,如果它是一个 Web 服务器,并且您没有发送关闭,那么某些浏览器会将其读取为管道中断(错误)并立即尝试重新连接。正确关闭连接只是礼貌,它将有助于保持代码的逻辑组织(您确切地知道如何处理所有资源)。
我不是 100% 确定 erlang 如何处理垃圾收集,但我可以说对于大多数编程语言(因此我也假设是 erlang),终止进程将处理与之相关的所有内存,所以让进程死掉应该没有内存泄漏。
但是,如果缓冲区中还有潜在的内容要发送到客户端,您可能希望退出过程,以便在关闭之前刷新缓冲区或连接,否则您可能会冒数据丢失的风险。
编辑:正如legoscia所提到的,任何打开的文件描述符都应该由erlang优雅地处理,但是在退出进程之前自己关闭它们永远不会受到伤害(我称之为“好习惯”)。
于 2012-08-13T00:06:42.133 回答