主管行为

Dan*_*iel 0 erlang erlang-otp erlang-supervisor

在实施主管时..如果,在主管模块中,我做了类似的事情

init([_]) - >
{ok,
{{one_for_one,5,60},
[{reverese,{reverse,start_reverse,[]},permanent,brutal_kill,worker,[]}]}}.

而反向功能是:

start_reverse() - >
Pid = spawn(?MODULE,reverse,[]).

由于start_reverse函数在每种情况下都正常退出,因此无法工作.但是,当我添加这样一行时:

start_reverse() - >
Pid = spawn(?MODULE,reverse,[]),
{ok,Pid}.

即使功能正常退出,它也能正常工作.有人可以解释原因吗?

I G*_*ERS 5

容易,

问题是supervisor需要一个特定的调用约定来支持进程的关闭和初始化.您的低级代码会spawn忽略该约定.你也应该

  • 使用gen_something行为gen_server是最常见的.
  • 使用产生流程 proc_lib
  • 用一个 supervisor_bridge

否则,您的代码根本不会利用OTP.你想要它.