5

在 Cowboy github 上提供的示例中,以及我在网上找到的其他一些示例中,有一个一对一的主管似乎什么都不做。我什至相信我看到了一个带有以下评论的示例,“就像真正的主管什么都不做一样”。

这么多牛仔示例中的主管模块的目的是什么?

从 echo_get 示例:

%% Feel free to use, reuse and abuse the code in this file.

%% @private-module(echo_get_sup).
-behaviour(supervisor).

%% API.
-export([start_link/0]).

%% supervisor.
-export([init/1]).

%% API.
-spec start_link() -> {ok, pid()}.
 start_link() ->    
     supervisor:start_link({local, ?MODULE}, ?MODULE, []).

%% supervisor.
init([]) ->
    Procs = [], 
    {ok, {{one_for_one, 10, 10}, Procs}}.
4

2 回答 2

6

来自 erlang应用程序行为文档

start在启动应用程序时调用,并且应该通过启动顶级主管来创建监督树。预计会返回最高主管的 pid 和一个可选的 term State,默认为[]. 该术语按原样传递以停止。

他有这个虚拟主管,所以他可以在此处的 start 函数结束时调用它。我认为它除了满足这个条件之外没有任何实际目的。

于 2012-10-05T19:41:26.333 回答
1

您不需要指定主管在启动时管理的所有子项。您可以使用,和动态添加/启动它们supervisor:start_child/2并管理它们。这意味着即使主管从一开始就没有孩子,但这并不意味着它只是一个假人。supevisor:restart_child/2supervisor:terminate_child/2supervisor:delete_child/2

真正的主管“什么都不做”的评论很可能与这样一个事实有关,即主管只能监督进程而不能像工作进程那样做任何工作。或者至少应该是这个意思!

于 2012-10-06T00:44:18.187 回答