当我们给supervisor指定需要创建的子进程的时候,会指定M,F,A,如果是simple_one_for_one的策略的话,启动子进程的方式是supervisor:start_child(SupName, OtherArgs),这种方式可以根据调用者的需求传不同的参数给需要启动的子进程的方法。和最初的参数合并成一个数组,A ++ OtherArgs。那么这个时候就有个问题了,既然参数不一致,那么在子进程挂掉的情况下,怎么重新启动对应的子进程呢???
原来supervisor会把每个自己管理的child的启动信息都存储在自己的进程字典中,Key就是Child的Pid,这样的话,如果某个Child挂掉,他的supervisor会收到一个{'EXIT',ChildPid,Reason}的消息,然后根据消息中的ChildPid去进程字典中找到这个Child的启动信息,重新启动,并更新进程字典中的信息。
supervisor的源代码就在:https://github.com/erlang/otp项目下的otp/lib/stdlib/src/supervisor.erl中,可以没事看看。
相关推荐
erlang四大behaviour之四-supervisor
erlang的supervisor模块,自己写了一些简单的代码来区分不同重启策略的区别
受 Erlang Supervisor 和 Process 类的启发,它们通过将协程彼此隔离来启用容错并行应用程序,从而防止协程中的异常使主要 nodejs 进程崩溃。安装 npm install domain-supervisor用法 var Supervisor = require('...
Ergo Framework实现了诸如GenServer / Supervisor / Application类的OTP设计模式,并使您能够创建与Erlang基础架构进行本地集成的高性能和可靠的应用程序 产品特点 Erlang节点(运行单节点/) (以摆脱erlang的...
- If you run change_log_format/1,2 and appender crashed, a restart from the supervisor will not record the latest format used. It will only use either the default format or the format used in the ...
backoff_supervisor backoff_supervisor是一个simple_one_for_one主管,有以下区别: 最多 1 个孩子。 start_child/2在尝试启动第二个孩子时返回{error, {already_started, Pid}} 。 最大重启次数为0 。 如果一个...
homelander:由ErlangOTP支持的简单shell命令监视
潜水员使用和查询数据库的Erlang / Elixir HBase驱动程序。 Diver在启动时将Java服务器创建为,并将GenServer请求直接分派到在Java服务器上运行的HBaseClient 。 这些请求由HBase群集上的客户端异步执行,并且响应...
导演:导演是ErlangElixir过程的生产就绪主管和经理,专注于速度,性能和灵活性。
Supervisor 过程 流程是OTP的最低级别构建块,所有其他参与者都直接或间接地建立在流程之上。 通常,这种抽象在Gleam应用程序中不会经常使用,而青睐其他提供更多功能的actor类型。 演员 actor是Gleam中最常用的过程...
背景 相信使用 Node.js 开发过 Web 应用的同学一定苦恼过新修改的代码...这个方法也已经有很多成熟的解决方案提供了,比如已经被弃坑的 node-supervisor,以及现在比较火的 PM2 ,或者比较轻量级的 node-dev 等等均是这