问题标签 [erlang-supervisor]

For questions regarding programming in ECMAScript (JavaScript/JS) and its various dialects/implementations (excluding ActionScript). Note JavaScript is NOT the same as Java! Please include all relevant tags on your question; e.g., [node.js], [jquery], [json], [reactjs], [angular], [ember.js], [vue.js], [typescript], [svelte], etc.

0 投票
1 回答
1566 浏览

erlang - Erlang 主管重启间隔

我有一个具有one_for_one重启策略的主管。是否可以在子进程重新启动之间设置一些时间间隔?

例如,远程数据库崩溃了,我想在恢复连接尝试之间等待 10 秒。

0 投票
2 回答
648 浏览

erlang - 为 gen_server 添加了主管,立即关闭?

编辑:下面。

为什么我的受监督的 gen_server 这么快就关闭了?

我将给出这些组织名称以更清楚地说明我希望在我的应用程序中使用的命令链:首先我从“assembly_line_worker”开始,然后将“marketing_specialist”添加到我的监督树中......

ceo_supervisor.erl

assembly_line_worker_supervisor.erl

装配线工人.erl

正在发生的事情是装配线工人做了一些工作,比如在调用 ceo_supervisor:start_link(#innovative_ideas{}) 命令后接收到几条消息,然后它就关闭了。知道为什么吗?我知道 gen_server 正在接收一些消息,因为它 io:format 将它们发送到控制台。

谢谢!


编辑:我通过 erlsrv.exe 在 Windows 上托管它,我发现当我通过如下函数启动程序时:

...此功能立即退出会导致我的主管/gen_servers 关闭。我希望这是因为所有这些都通过监督链接到原始调用过程,所以当它退出时,孩子们也应该这样做。

所以我想一个更好的问题是,我怎样才能让我的主管在完成所有启动配置后继续运行?除了将所有这些包装在应用程序中之外,还有其他选择吗?(听起来还不错……)

感谢您的探索性问题!我通过这种方式了解了更多关于主管的信息。

蝙蝠侠

0 投票
1 回答
420 浏览

erlang - 主管重新启动策略和 childspec

我正在阅读rabbitmq的supervisor2.erl,rabbit_channel_sup_sup.erl, rabbit_channel_sup.erl源代码。

childspecstart 参数为"temporary"时,表示子进程在任何原因退出后都不会重新启动。这样对吗?

当启动参数为"temporary"时,每个重启参数没有区别,one-for-one, one-for-all,one-for-rest,simple-one-for-one。因为代码运行结果是一样的。这样对吗?

以下代码来自supervisor2.erl文件

0 投票
1 回答
619 浏览

erlang - erlang的EXIT和DOWN信号

以下代码也来自rabbitmq's supervisor2.erl. 代码的功能是杀死主管的孩子,为每个孩子:

  1. monitor child 发送一个可捕获的退出信号

  2. 启动计时器

  3. 如果计时器到达,则发送一个无法捕获的退出信号(kill)。

我的问题EXIT and DOWN signal.

如果孩子没有捕获退出信号,主管会收到2个信号,第一个是exit信号,然后是DOWN信号,对吗?信号顺序是否得到严格保证?

如果孩子陷阱exit信号,主管只会收到1个信号,只是down信号,是吗?

0 投票
1 回答
149 浏览

erlang - supervisor:start_child 的返回值 {ok, Child, Info} 中的 Info 来自哪里?

我从 Erlang 文档中看到 supervisor:start_child 可以返回两个不同的非错误结果:{ok, Child} 和 {ok, Child, Info}。此信息在哪里设置?simple_one_for_one sups 与其他sups 有什么不同吗?我无法找到有关此的示例/文档...

0 投票
2 回答
551 浏览

sockets - erlang 套接字和 gen_server - 服务器端没有收到数据

简而言之: 我正在尝试制作一个客户端连接并发送/接收消息的套接字服务器(基于 Learn you some erlang tutorial http://learnyousomeerlang.com/buckets-of-sockets中的 sockserv 代码)服务器端组件: supervisor - 独特的,从一开始就开始,产生具有 gen_server 行为的进程 gen_server 行为进程 - 每个处理一个连接。

客户端:客户端连接到套接字并发送几个字节的数据然后断开连接。

代码详细信息 我的代码与本教程中的代码几乎相同。主管是相同的。gen_server 组件被简化,因此它只有一个 handle_info 案例,它应该捕获所有内容并打印它。

问题 连接成功,但是当客户端发送数据时,服务器表现得好像没有接收到数据(我希望在发生这种情况时调用handle_info)。

handle_info 确实被调用,但仅在客户端断开连接并且此事件与消息一起报告时。

我尝试 过使用 Erlang 或 Java 编写的不同客户端,我尝试过设置套接字的主动/被动状态。教程作者在发送消息后设置{active, once}。在这样创建 AcceptSocket 之后,我最终只是设置了 {active, true} :(gen_server proc 初始化为包含由主管创建的原始 ListenSocket 的状态)

它绝对没有效果。handle_info 仅在连接丢失时被调用,因为客户端断开连接。每当客户端发送数据时,什么都不会发生。

可能是什么问题呢?我花了很长时间在这上面,我真的不知道。非常感谢。

0 投票
1 回答
422 浏览

erlang - Erlang 主管树终止

我正在尝试构建一个具有以下结构的主管树:

1 个根主管 -> 3 个“级别”主管 -> 每个级别主管都有一个初始化主管 -> X 个工人(现在只有 1 个)

但是由于某种原因,启动第二级主管会使整个树终止,如果我只启动 1 个根 -> 1 个级别 -> 1 个初始化 -> 1 个工作人员(或更多工作人员),那很好,但是一旦我尝试添加更多监督树终止。

aux_datasocket 模块是一个非常简单的 gen_server ,它本身工作得很好(因为它现在除了启动 gen_server 什么都不做)所以我很肯定错误不在于该模块。

0 投票
1 回答
461 浏览

erlang - mnesia 不会与主管一起重新启动

我在使用 gen_server、supervisor 和 mnesia 时遇到问题。我有主管:http ://pastebin.com/8rkfrq7D ,它会触发正在启动 mnesia 的服务器模块。我的问题是当我写

我懂了。我删除了负责启动 mnesia 的部分,它运行良好,所以我希望即时退出(通过 ctrl+c)不会正确关闭 mnesia。不幸的是,即使我调用 mnesia:stop(),在快速调用 start_link() 之前,它也会返回异常退出。请帮我解决这个问题。

0 投票
1 回答
199 浏览

erlang - 如何确定监督树中的工作人员是首次启动还是已重新启动

我有一个简单的主管配置:

甚至是简单的工人:

那么是否有可能确定这是主管第一次调用 start_link 函数,还是工作进程在过去某个时间崩溃并且现在正在重新启动?

0 投票
0 回答
69 浏览

erlang - 在孩子被主管重新启动后使用相同的参考?

我有一个主管可以启动作为数据库服务器的动态子级。当数据库服务器被异常终止时,主管重新启动它,这是它应该的。

但我在 shell 中有一个对数据库服务器的引用,如下所示:

例如 {<0.52.0>,#Ref<0.0.0.146>}

当我想用我的一个数据库服务器做某事时,它看起来像这样

例如

因此,在该孩子重新启动后,我希望能够使用相同的 Ref,即使 Pid 在重新启动时很可能发生了变化。

在网上找不到任何好的解决方案:/

谢谢!