实施主管时..如果在主管模块中,我做了类似
的事情init([_]) - >
【OK,
{{one_for_one,5,60},
[{reverese,{reverse,start_reverse,[]},permanent,brutal_kill,worker,[]}]}}。
,反向功能是:
start_reverse() - >
PID =产卵(?MODULE,逆转,[])。
由于start_reverse函数在每种情况下都正常退出,因此无效。但是,当我添加这样一行时:
start_reverse() - >
PID =产卵(?MODULE,逆转,[]),
【OK,PID}。
即使功能也正常退出,它也能正常工作。有人可以解释原因吗?
答案 0 :(得分:5)
轻松,
问题是supervisor
需要一个特定的调用约定来支持进程的关闭和初始化。具有低级spawn
的代码会忽略该约定。你应该
gen_server
是最常见的。proc_lib
supervisor_bridge
否则,您的代码根本不会利用OTP。你想要它。
答案 1 :(得分:1)
实际上......主管子进程并非真正需要gen_server
。主管documentation特别提及
start函数必须创建并链接到子进程,并且应该返回{ok,Child}或{ok,Child,Info},其中Child是子进程的pid,Info是任意一个被忽略的术语。主管。
这就是为什么当你返回{ok, Pid}
时它工作的原因..