Erlang 主管行为
当执行主管时。。如果在“主管”模块中,我执行以下操作 初始化([])->Erlang 主管行为,erlang,otp,erlang-supervisor,Erlang,Otp,Erlang Supervisor,当执行主管时。。如果在“主管”模块中,我执行以下操作 初始化([])-> {好的, {{一对一,5,60}, [{reverse,{reverse,start_reverse,[]},永久性,残暴杀戮,worker,[]}} 反向功能是: 开始反转()-> Pid=spawn(?模块,反向,[]) 由于start_reverse功能在任何情况下都会正常退出,因此无法工作。但是,当我添加这样一行时: 开始反转()-> Pid=spawn(?模块,反向,[]), {好的,Pid} 即使函数正常退出,
{好的,
{{一对一,5,60},
[{reverse,{reverse,start_reverse,[]},永久性,残暴杀戮,worker,[]}} 反向功能是: 开始反转()->
Pid=spawn(?模块,反向,[]) 由于start_reverse功能在任何情况下都会正常退出,因此无法工作。但是,当我添加这样一行时: 开始反转()->
Pid=spawn(?模块,反向,[]),
{好的,Pid} 即使函数正常退出,它也能工作。有人能解释一下原因吗?很容易 问题是,
主管
需要一个特定的调用约定来支持进程的关闭和初始化。使用低级spawn
的代码忽略该约定。你也应该
- 使用gen\u something行为,
是最常见的gen\u服务器
- 使用
proc_lib
- 使用
supervisor\u桥
主管
需要一个特定的调用约定来支持进程的关闭和初始化。使用低级spawn
的代码忽略该约定。你也应该
- 使用gen\u something行为,
是最常见的gen\u服务器
- 使用
proc_lib
- 使用
supervisor\u桥
否则,您的代码根本不会利用OTP。而你却希望如此。事实上。。主管子进程实际上不需要成为
gen\u服务器
。主管特别提到:
start函数必须创建并链接到子进程,并应返回{ok,child}或{ok,child,Info},其中child是子进程的pid,Info是主管忽略的任意项
这就是为什么当您返回
{ok,Pid}
时它工作了..实际上。。主管子进程实际上不需要成为gen\u服务器
。主管特别提到:
start函数必须创建并链接到子进程,并应返回{ok,child}或{ok,child,Info},其中child是子进程的pid,Info是主管忽略的任意项
这就是为什么当你返回
{ok,Pid}
时它起作用的原因。你能告诉我为什么我需要或应该需要OTP吗?@dkk:这对于另一个问题来说是一个很好的话题?搜索它,它可能已经被回答了…仅供参考,我已经创建了一个新问题:你能告诉我为什么我需要或应该需要OTP吗?@dkk:这将是另一个问题的一个好话题?搜索它,它可能已经被回答了…仅供参考,我创建了一个新问题: