0

我们有一个在远程节点上运行的服务器。现在我们想在不停止服务器的情况下添加一个新特性(由 gen_* 实现)。所以我使用 rpc:call(Node, my_sup, start_link, []) 来启动主管。但不幸的是,我发现主管链接到我的本地 shell 而不是远程节点,并且在 rpc:call 之后它立即失败(sup 进程被杀死)。

我只是想知道有没有其他方法可以动态远程启动新添加的主管?

4

1 回答 1

1

主管总是必须与某事联系起来。通常,OTP 应用程序在其start方法中生成“根监督者”,监督所有其他进程和其他监督者。它链接到启动应用程序的进程。

如果你有这样的 root 主管,你可以使用supervisor:start_child(SupRef, ChildSpec). SupRef是对“根主管”的引用(它可能是 Pid 或名称)并且ChildSpec将是主管,您想要生成或 gen_server 本身。此功能记录在这里:

http://www.erlang.org/doc/man/supervisor.html#start_child-2

如果您没有监督树。您可以将新功能打包为 OTP 应用程序,它会在启动时生成第一个主管。

于 2014-09-01T06:18:51.653 回答