spawn_monitor()和'DOWN'消息

时间:2010-03-26 09:05:27

标签: erlang

(理论上)可能是spawn_monitor()'ed进程退出(正常退出或出错)而不向父进程发送'DOWN'消息吗?我有一个非常奇怪的进程泄漏,似乎有些进程不发送'DOWN'消息。我正在使用Ubuntu 9.10附带的Erlang包。也许这是一个已知的错误?

2 个答案:

答案 0 :(得分:1)

您需要显示一些代码。监控是erlang工作方式的核心。

很难说出你的实际问题是什么,因为你没有描述你所看到的,所以我不得不猜测。

您要么没有尝试接收关闭消息,要么该进程没有退出。

如果你有进程泄漏,听起来他们实际上并没有退出。

您可能正在尝试构建自己的supervisor模块。如果你想要理智的进程树关闭和/或重启,我强烈建议使用OTP的主管。

答案 1 :(得分:0)

也许你在某个时候被监视这个过程?

从erlang的文档中读取:demonitor / 1:

  

一旦erlang:demonitor(MonitorRef)已经返回它,保证不行   {'DOWN',MonitorRef,_,_,_}消息   由于显示器将被放入   中的调用者消息队列   未来。 A {'DOWN',MonitorRef,_,_,   _}消息可能已放在调用者消息队列之前   但是打电话。因此,大多数情况下   情况,建议删除这样的   消息中的“DOWN”消息   监控后的队列   停止。二郎神:demonitor(MonitorRef,   [flush])可以用来代替   erlang:demonitor(MonitorRef)如果这样的话   需要清理。