我有一个OTP应用程序,包括一个监督少量gen_servers的主管。典型的子规范如下:
{my_server,
{my_server, start_link, [123]},
permanent,
5000,
worker,
[my_server]}
到目前为止没有问题。
我现在想要使用与上面相同的模块Module / Fn向主管结构添加额外的gen_server,但是不同的参数,例如
{my_server_2,
{my_server, start_link, [123]},
permanent,
5000,
worker,
[my_server_2]}
我认为这会奏效,但不会:
=SUPERVISOR REPORT==== 15-Apr-2010::16:50:13 ===
Supervisor: {local,my_sup}
Context: start_error
Reason: {already_started,<0.179.0>}
Offender: [{pid,undefined},
{name,my_server_2},
{mfa,{my_server,start_link,[]}},
{restart_type,permanent},
{shutdown,5000},
{child_type,worker}]
每个子规范的第二个元素中的模块参数是否需要不同?
谢谢,
贾斯汀
答案 0 :(得分:7)
我的猜测是my_server使用gen_server:start_link / 4来注册它的名字,所以当第二个尝试启动时它不能,因为名字已被采用。 gen_servers必须在没有名称(gen_server:start_link / 3)或不同名称的情况下启动。
改变子规范的最后一个元素似乎很奇怪,它标识了工作者使用的模块列表。这真的是你想要的吗?