Erlang中的资源清理

时间:2012-02-16 15:37:20

标签: erlang

在Erlang中,当资源的所有引用消失时,是否可以自动调用清理函数?例如,如果永远不调用file:open/2,那么通过调用file:close/1打开的本机文件句柄是否会被关闭?如果可以的话,它是如何完成的?如果不可能,是否存在使资源泄漏的Erlang成语不是问题?

1 个答案:

答案 0 :(得分:5)

来自file documentation

  

IoDevice实际上是处理文件的进程的pid。此过程与最初打开文件的进程相关联。如果IoDevice链接到的任何进程终止,则文件将被关闭,进程本身将被终止。从此调用返回的IoDevice可用作IO函数的参数(请参阅io(3))。

因此,如果打开文件的进程终止,文件将自动关闭。

如果您正在使用OTP,并且希望在流程终止时确保文件已关闭,请将file:close添加到terminate功能。当然,你的gen_ *必须附在主管身上。