1.概念:
supervisor是OTP框架四大行为之一,它用于监视别的进程,当一个进程崩溃是,它能够快速重启该进程,并根据不同的策略做出不同的行为。
2.常用函数:
1.start_link({local/global,NAME}, MODULE, Args).
创建一个supervisor的进程服务器,local为本地进程,global为全局进程,NAME为该进程名,MODULE为回调模块,调用该MODULE的init([])函数,Args为init的参数列表。
2.init([]) -> Result.
1. Result格式为:{ok,{SupFlags,[ChildSpec]}} | ignore,SupFlags通常为形式为{How, Max, Within}:在多长时间内(Within)重启了几次(Max),如何重启(HOW 重启策略);设计最大重启频率是为了避免反复重启进入死循环,一旦超出了此阈值,supervisor进程会结束掉自己以及它所有的子进程,并通过进程树传递退出消息,更上层的supervisor就会采取适当的措施,要么重启终止的supervisor要么自己也终止掉.
2. How通常有以下几种格式:
one_for_one : 若一个子进程崩溃,马上把他重启。
one_for_all : 如果子进程终止,所有其它子进程也都会被终止,然后所有进程都会被重启.
rest_for_one:如果一个子进程终止,在这个进程启动之后启动的进程都会被终止掉.然后终止掉的进程和连带关闭的进程都会被重启.
3.ChildSpec为添加的子进程列表,格式会在start_child说明。