有没有办法让流程发现它已经在Erlang中被孤儿?

时间:2015-02-17 22:52:52

标签: erlang

E.g。

make_orphan() ->
  P = spawn(...),
  ok
.

在make_orphan返回后,P有没有办法接收消息?或者P注定要永远困扰系统(耗尽宝贵的资源),除非它自己退出?

2 个答案:

答案 0 :(得分:1)

直接的方式:

  

在make_orphan返回后的某个时间收到消息

带有monitor

make_orphan() ->
  Parent = self(),
  P = spawn(fun() -> monitor(process, Parent), ... end),
  ok
当父亲去世时,P会收到{'DOWN', Ref, process, Parent, Reason}消息。即使家长在调用monitor/2之前退出,该邮件也会包含原因noproc

答案 1 :(得分:0)

将P传递给某个地方的某个进程,以某种方式注册P(注册,全局,gproc,pg2,某些自制解决方案等),有人监控它等等。当然,有几种方法。但是OTP程序的一个基本原则是每个进程都属于某个监督树,所以这不再是一个问题。

除非你正在建立一个超出OTP假设的系统(如细胞自动机中的同伴监督),否则你不想创造孤儿存在的机会。孤立进程是Erlang等同于内存泄漏 - 这绝不是一件好事。

有关编写OTP进程与原始Erlang内容的一些影响的一些背景信息,您更有可能泄漏进程,请阅读the documentation for proc_libthe "Sys and Proc_Lib" chapter the OTP Design Principles docs }。

相关问题