supervisor_bridge
模块
supervisor_bridge
模块摘要
通用主管桥接行为。
描述
此行为模块提供了一个监督桥,一个将未按照OTP设计原则设计的子系统连接到监督树的过程。主管桥位于主管和子系统之间。它对自己的主管来说就像一个真正的主管,但是与子系统的真正主管有不同的接口。有关更多信息,请参阅Supervisor Behaviour
OTP设计原则。
监督桥假定用于启动和停止子系统的功能位于导出预定义函数集的回调模块中。
sys(3)
模块可用于调试管理桥。
除非另有说明,否则如果指定的管理桥不存在或者指定了错误参数,则此模块中的所有功能都会失败。
出口
start_link(Module, Args) -> Result
start_link(SupBridgeName, Module, Args) -> Result
类型
创建一个监督桥接进程,链接到调用进程,该进程调用Module:init/1
启动子系统。为确保同步启动过程,此功能在返回之前不会Module:init/1
返回。
- 如果
SupBridgeName={local,Name}
,主管桥在本地注册为Name
使用register/2
。
- 如果
SupBridgeName={global,Name}
,主管桥在全球范围内注册为Name
使用global:register_name/2
。
- 如果
SupBridgeName={via,Module,Name}
,主管桥被注册为Name
使用由模块表示的注册表。Module
回调是导出功能register_name/2
,unregister_name/1
和send/2
,这是表现得像在相应的功能global
。因此,{via,global,GlobalName}
是一个有效的参考。如果没有提供名称,主管桥没有注册。Module
是回调模块的名称。Args
是一个作为参数传递给的任意术语Module:init/1
。
- 如果监督者桥和子系统成功启动,则函数返回
{ok,Pid}
,其中Pid
是监督者桥的pid。
- 如果已经存在具有指定的进程
SupBridgeName
,则函数返回{error,{already_started,Pid}}
,当Pid
该进程的pid 。
- 如果
Module:init/1
返回ignore
,则此函数ignore
也会返回,并且监督者桥接器将以原因终止normal
。
- 如果
Module:init/1
失败或者返回一个错误元组或者一个不正确的值,这个函数返回{error,Errorr}
,其中Error
是一个包含错误信息的术语,并且监督者网桥因为理由而终止Error
。
回调函数
以下函数必须从supervisor_bridge
回调模块中导出。
出口
Module:init(Args) -> Result
类型
无论何时开始使用监督桥start_link/2,3
,新功能都会调用该功能来启动子系统并进行初始化。
Args
是Args
提供给启动函数的参数。
函数返回{ok,Pid,State}
,Pid
子系统中主进程的pid 在哪里,并且State
是任何项。
如果稍后Pid
以理由终止Reason
,则主管桥也将以理由终止Reason
。如果稍后监督人桥被其主管阻止Reason
,则其调用Module:terminate(Reason,State)
终止。
如果初始化失败,函数将返回{error,Error}
,其中Error
是任何项,或者ignore
。
Module:terminate(Reason, State)
类型
监督人桥接器在即将终止时调用该功能。这是相反的,Module:init/1
并停止子系统,并进行任何必要的清理。返回值被忽略。
Reason
是shutdown
如果主管桥由监管当局终止。如果主管桥终止因为AA联过程(除了子系统的主处理)已经与原因终止Term
,然后Reason
变成Term
。
State
取自返回值Module:init/1
。
另见
supervisor(3)
,sys(3)
本文档系腾讯云开发者社区成员共同维护,如有问题请联系 cloudcommunity@tencent.com