Erlang:使用超级用户:start_child / 2在gen_server:init / 1内添加新的子代将挂断应用程序

Mithun B

我有一个Erlang应用程序,主管启动了gen_server。生成的gen_server在其init / 1中具有逻辑,以将新进程挂接到主管。当它只需执行此操作时,

supervisor:start_child(supervisor_name, Child_spec),

在init / 1内部,应用程序挂起。但是如果我使用

rpc:cast(node(), supervisor, start_child, [supervisor_name, Child_spec]),

然后应用程序运行平稳。任何人都可以给我一些想法来调试这种情况,或者非常感谢您的见解。

莱戈西亚

发生这种情况是因为主管接连地启动其子进程,等待每个子进程完成初始化,然后再生成下一个进程。

也就是说,主管已获得gen_server模块的启动功能,类似于{my_module, start_link, []}它要等到该函数返回,然后再不处理其他任何请求。my_module:start_link/0Calls gen_server:start_link/4,仅在回调函数my_module:init/1返回后才返回。

但是,my_module:init/1由于主管正在等待my_module:init/1返回,因此向主管发出了阻塞呼叫,而主管此时并没有期望,这会导致死锁。

它起作用的原因rpc:castrpc:cast不等待函数返回,因此没有死锁。


您是否需要在gen_serverinit回调函数中添加新的子规范您可以将两个子规范都添加到您的主管init功能中,然后将它们一个接一个地启动。

本文收集自互联网,转载请注明来源。

如有侵权,请联系[email protected] 删除。

编辑于
0

我来说两句

0条评论
登录后参与评论

相关文章

来自分类Dev

Erlang init_per_group终止gen_server

来自分类Dev

Erlang init_per_group终止gen_server

来自分类Dev

Erlang冻结了超级用户:start_child

来自分类Dev

ERLang OTP gen_server:call() fails

来自分类Dev

ERLang OTP gen_server:call()失败

来自分类Dev

Erlang:无法生成gen_server:call()

来自分类Dev

在Erlang中,gen_server:start()和gen_server:start_link()有什么区别?

来自分类Dev

在Erlang中,gen_server:start()和gen_server:start_link()有什么区别?

来自分类Dev

在Erlang / OTP中gen_server调用的开销是多少?

来自分类Dev

Erlang,尝试使gen_server:调用有很多响应

来自分类Dev

Erlang R19中的gen_server实现

来自分类Dev

如何将参数传递给gen_server函数?

来自分类Dev

gen_server套接字广播使用什么OTP模式?

来自分类Dev

如何使用eunit测试gen_server内部状态

来自分类Dev

如何使用eunit测试gen_server内部状态

来自分类Dev

gen_tcp:使用超级用户时,connect将关闭

来自分类Dev

gen_tcp:使用超级用户时,connect将关闭

来自分类Dev

使用Webpack将PrimeNG添加到Angular2应用程序

来自分类Dev

当handle_call返回noreply时,erlang otp gen_server断开连接

来自分类Dev

如何停止在erlang中实现为gen_server的tcp_listener

来自分类Dev

与gen_server:call()有关的Erlang可扩展性问题

来自分类Dev

Erlang应用程序start / 2不会执行

来自分类Dev

如何使用heroku将新的pip包添加到已部署的应用程序

来自分类Dev

使用 Angular CLI 在 Angular 2 中部署新的应用程序构建后通知用户

来自分类Dev

匿名的gen_server实例?

来自分类Dev

Azure门户添加可以创建Web应用程序,SQL Server和其他资源的用户

来自分类Dev

将具有哈希密码的用户表从旧的php应用程序迁移到新的laravel应用程序

来自分类Dev

将应用程序从付费购买转换为应用程序内购买?如何找出哪些用户付费?

来自分类Dev

仅使用“ Web应用程序”方法将Firebase添加到我的Cordova应用程序是否可行?

Related 相关文章

  1. 1

    Erlang init_per_group终止gen_server

  2. 2

    Erlang init_per_group终止gen_server

  3. 3

    Erlang冻结了超级用户:start_child

  4. 4

    ERLang OTP gen_server:call() fails

  5. 5

    ERLang OTP gen_server:call()失败

  6. 6

    Erlang:无法生成gen_server:call()

  7. 7

    在Erlang中,gen_server:start()和gen_server:start_link()有什么区别?

  8. 8

    在Erlang中,gen_server:start()和gen_server:start_link()有什么区别?

  9. 9

    在Erlang / OTP中gen_server调用的开销是多少?

  10. 10

    Erlang,尝试使gen_server:调用有很多响应

  11. 11

    Erlang R19中的gen_server实现

  12. 12

    如何将参数传递给gen_server函数?

  13. 13

    gen_server套接字广播使用什么OTP模式?

  14. 14

    如何使用eunit测试gen_server内部状态

  15. 15

    如何使用eunit测试gen_server内部状态

  16. 16

    gen_tcp:使用超级用户时,connect将关闭

  17. 17

    gen_tcp:使用超级用户时,connect将关闭

  18. 18

    使用Webpack将PrimeNG添加到Angular2应用程序

  19. 19

    当handle_call返回noreply时,erlang otp gen_server断开连接

  20. 20

    如何停止在erlang中实现为gen_server的tcp_listener

  21. 21

    与gen_server:call()有关的Erlang可扩展性问题

  22. 22

    Erlang应用程序start / 2不会执行

  23. 23

    如何使用heroku将新的pip包添加到已部署的应用程序

  24. 24

    使用 Angular CLI 在 Angular 2 中部署新的应用程序构建后通知用户

  25. 25

    匿名的gen_server实例?

  26. 26

    Azure门户添加可以创建Web应用程序,SQL Server和其他资源的用户

  27. 27

    将具有哈希密码的用户表从旧的php应用程序迁移到新的laravel应用程序

  28. 28

    将应用程序从付费购买转换为应用程序内购买?如何找出哪些用户付费?

  29. 29

    仅使用“ Web应用程序”方法将Firebase添加到我的Cordova应用程序是否可行?

热门标签

归档