Erlang进程如何监控自身

4
我正在尝试创建一个Erlang进程,可以监视自身并在退出时重新启动。到目前为止,我完全没有成功,因此没有任何代码可展示。在Erlang中是否可能实现这一点?如果可以,如何实现?
编辑:J Fritsch发布了一个链接,演示了如何监视自身,但仅限于一次。如果两次使用exit(Doctor,doctor),第二次将不起作用。有什么想法可以解决这个问题吗?

J Fritsch的示例中,您不能两次使用exit(Doctor, doctor),因为Doctor不包含正在运行的医生进程的PID,而是新的一个。 - Hynek -Pichi- Vychodil
有没有解决这个问题的方法? - Dean Barnes
1
不要这样做。如果有人用 exit(Pid, kill) 杀死了你的进程,你无法掩盖它。监督者是处理重启的方法,请使用它。J Fritsch 的示例在许多其他方面存在缺陷。 - Hynek -Pichi- Vychodil
1
我也在读《七周七语言》 :) - scubbo
1个回答

11

如果进行监视的进程也是崩溃的进程,你将不可避免地陷入困境。

使用一个管理进程。


2
在进程的主函数周围包装一个try-catch,并让函数从catch内部递归调用自身。您还需要设置trap_exit。我不确定,但可能还有一些无法捕获的进程死亡方式。 - Marcelo Cantos
1
或者,让该进程启动自己的监控/重启进程。 - Marcelo Cantos
3
这是哪本书?一旦进程死亡,它就真正死亡了,而且无法执行任何操作。您需要另一个进程来监视它。这就是拥有主管和工作者的基础。 - rvirding
1
这本书是《七周七语言》。 - Dean Barnes
1
http://blog.plagelao.com/7languages7weeks/erlang/2011/07/17/erlang-day-three.html - J Fritsch
显示剩余3条评论

网页内容由stack overflow 提供, 点击上面的
可以查看英文原文,
原文链接