erlang]supervisor(监控树)的重启策略

简介:

1. init函数

init() ->
    {ok, {SupFlags, [ChildSpec,...]}} | ignore.

[ChildSpec,...] 是在init之后默认要启动的子进程。

2. SupFlags参数

{Type, Times, Sec}

  • Type: 重启策略
    • one_for_one: 一个子进程终止,只重启该进程,在init的时候会启动参数内的子进程
    • simple_one_for_one: 同one_for_one,但是在init的时候不会启动子进程,需要动态调用启动
    • one_for_all: 一个子进程终止,将重启所有子进程
    • rest_for_one: 一个子进程终止,将按顺序重启这个子进程和之后顺序的子进程
  • Times: 次数(监控频率)
  • Sec: 秒数(监控频率),如果在Sec秒内重启次数超过Times,则终止所有进程,并终止监控树,将由父进程决定它的命运

3. ChildSpec参数如下

{Id, StartFunc, Restart, Shutdown, Type, Modules}

%% 或者

#{
    id => child_id(),
    start => mfaargs(),
    restart => restart(),
    shutdown => shutdown(),
    type => work(),
    modules => modules()
}
  • Id 子进程ID标识符
  • StartFunc = {M, F, A}: 子程序启动入口
  • Restart: 重启方案
    • permanent: 如果app终止了,整个系统都会停止工作(application:stop/1除外)。
    • transient: 如果app以normal的原因终止,没有影响。任何其它终止原因都谁导致整个系统关闭。
    • temporary: app可以以任何原因终止。只产生报告,没有其它任何影响。
  • Shutdown: 终止策略
    • brutal_kill: 无条件终止
    • 超时值(毫秒): 终止时,如果超时,则强制终止
    • infinity: 如果子进程是监控树,设置为无限大,等待其终止为止
  • Type:
    • worker: 普通子进程
    • supervisor: 子进程是监控树
  • Modules:
    • dynamic: 当子进程是gen_event
    • [Module]: 当子进程是监控树、gen_server或者gen_fsm,表示回调模块名称

4. 监控树操作

Sup通常可以为?MODULE

% 启动监控树
supervisor:start_link(Sup, []).

% 启动一个子进程
supervisor:start_child(Sup, ChildSpec).

% 停止一个子进程
supervisor:terminate(Sup, Id).

% 删除一个子进程
supervisor:delete_child(Sup, Id).  ,如需转载请自行联系原作者
相关文章
|
人工智能 自然语言处理 IDE
通义灵码使用指南
一款不用充钱也能让你变强的插件 通义灵码(TONGYI Lingma),可以称之为中国copilot 的平替品。我们一起看看如何使用安装,功能介绍,常用问题,客户测评等。
8664 12
通义灵码使用指南
|
弹性计算 Kubernetes 监控
Kubernetes 资源观测利器:KubeWatch
KubeWatch 用于观测 Kubernetes 资源情况,并实时通知到各种协作软件/聊天软件
3076 0
Kubernetes 资源观测利器:KubeWatch
|
JSON Kubernetes 数据格式
K8S client-go Patch example
我在本文中主要会介绍使用client-go的Patch方式,主要包括strategic merge patch和json-patch
|
Kubernetes Linux Docker
Kubernetes v1.22.1部署报错3:.com/google_containers/coredns:v1.8.4...
Kubernetes v1.22.1部署报错3:.com/google_containers/coredns:v1.8.4...
492 0
|
存储 关系型数据库 MySQL
【MYSQL】金额(金钱)相关的数据存储类型
int 对于游戏币等代币,一般存储为int类型是可行的。 问题在于越界,int类型长度为11位。 在存储人民币相关的金额的时候,则只能存储到9长度的人民币,也就是说,最大只能存储999999999,不到10亿的数值,如果业务增长很快的话,就会给自己留下隐患。
5310 0
|
缓存 关系型数据库 PostgreSQL
PostgreSQL relcache在长连接应用中的内存霸占"坑"
除了常见的执行计划缓存、数据缓存,PostgreSQL为了提高生成执行计划的效率,还提供了catalog, relation等缓存机制。PostgreSQL 9.5支持的缓存如下 ll src/backend/utils/cache/ attoptcache.c catcache.c
7905 0
|
编译器 Go
go语言编译选项
【10月更文挑战第17天】
324 5
|
Kubernetes API 数据安全/隐私保护
K8S中的ServiceAccount和useraccount并配置私有仓库用户名密码Harbor拉取私有镜像
K8S中的ServiceAccount和useraccount并配置私有仓库用户名密码Harbor拉取私有镜像
587 1
|
算法 网络协议 安全
最全的二叉树算法总结,30道题搞定大厂算法面试(一)
最全的二叉树算法总结,30道题搞定大厂算法面试

热门文章

最新文章