gpt4 book ai didi

erlang - 在 Erlang/OTP 监督者行为中监督一个普通进程

转载 作者:行者123 更新时间:2023-12-04 02:23:54 25 4
gpt4 key购买 nike

据我了解,在 Erlang/OTP 行为模型中,一个监督进程可以监督多个进程。

该进程可以是gen_servergen_fsm、gen_event。我的问题是,一个普通的进程可以在 Erlang/OTP 中被一个监督进程监督吗?我所说的普通进程是指不是 gen_servergen_fsmgen_event 的进程。

如果是这样,流程规范会是什么样子?我在下面尝试过但不起作用:

Spec = {Id, {my_module, my_function, [Par1, ..., ParN]}, permanent, 5000, worker, [my_module]}

我也试过这个:

Spec = {Id, {my_module, my_function, [Par1, ..., ParN]}, permanent, 5000, worker, []}

但是当我用 gen_server 模块和其中的函数替换模块和函数时,效果很好。

我可以断定主管的子进程不能是普通进程吗?

我得到的错误是:

错误如下:application: myapp 退出:{bad_return, {{myapp_app,开始,[正常,[]]}, {'导出', {{不匹配, {错误, {关闭, {failed_to_start_child,worker_1, {好的,状态}}}}}, [{myapp_app,开始,2, [{file,"src/myapp_app.erl"},{line,27}]}, {application_master,start_it_old,4, [{file,"application_master.erl"},{line,272}]}]}}}}

最佳答案

在没有看到您的来源的情况下,失败的最可能原因是普通的 spawn 调用返回只是一个 pid,而不是 OTP start_link 返回 {ok, Pid} 的调用,这是主管所期望的。

至于一个普通的进程能不能被监督...

简短回答:是的,但您应该使用 proc_lib 启动它。

长答案:是的,但您应该使用 proc_lib 启动它,其他一些东西也不会受到伤害。基本上,如果您打算在 OTP 监督树中工作,您的流程应该符合 OTP。请引用OTP Design Principles对于特殊/自定义流程,正如 legoscia 在对您的问题的评论中所建议的那样。

如果您监督一个不是使用 proc_lib 启动的进程,您将失去监督者给您的某些“保证”(因为缺少更好的术语)。例如,主管不会启动其进程列表中的第二个进程,直到第一个进程完成其 init 函数(在 gen_server/fsm/event 的情况下)。这种“保证”在通用 spawn 调用中丢失。

关于erlang - 在 Erlang/OTP 监督者行为中监督一个普通进程,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/24870255/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com