supervisor与gen_server是OTP标准库中提供的两种behavior,其中gen_server是基础的公共服务器框架,supervisor本身就是一个gen_server behavior的实例。
supervisor behavior是建立监控树的基础,只有一个回调函数init(Arg),返回该监控进程的监控规格,其中包括了被监控子进程的重启模式,以及所有被监控子进程的规格。这个规格比较难记,多写几遍也就记住了。
这里主要说明几点:
1. 子进程规格中,包含了MFA指定的子进程启动函数。这里的A必须是一个列表,F有几个参数,A列表中就要有几个元素,F没有参数时要写一个空列表[]。这与supervisor:start_link和gen_server:start_link中的Module、Argument参数不同,后两个Argument是传给init回调函数的参数,而init回调只有一个参数,所以argment没有必要时一个列表。
2. 子进程规格中的MFA启动函数必须启动一个子进程,并且必须将该子进程与supervisor进程连接,可以使用gen_server、supervisor的start_link,或者直接使用spawn_link,或者先创建,再link。supervisor进程中不会自动将子进程与自己连接起来,不知OTP为什么要这么设计。这个事实耗费了我两天时间才在同事提醒下发现,满脸泪水。。。
3. 子进程规格中的MFA正常情况下必须返回{ok, Pid}或{ok, Pid, Extra},否则supervisor也会报错,所以最好的办法就是使用gen_server:start_link, supervisor:start_link, spawn_link作为MFA的最后一条指令。
OTP中有些比较不易理解的地方,不容易找到为什么这样设计。
分享到:
相关推荐
Supervisor的各种安装方式都需要在线联网。但大部分的生产环境都是离线环境,是封闭的网络没有办法在线安装。这里整理了Supervisor的离线安装包和安装脚本,可以进行离线安装并能指定安装目录。 Supervisor离线...
资源来自pypi官网。 资源全名:supervisor_plus_cron-1.0.15201-py2.7.egg
资源来自pypi官网。 资源全名:supervisor_logging_gelf-0.0.1-py2-none-any.whl
学习matlab中的simulink的ppt,现在本人见过的最好的ppt,
supervisor_twiddler 该软件包是的RPC扩展,它允许以运行时通常无法实现的方式来操纵Supervisor的配置和状态。 安装 supervisor_twiddler 包上。 您可以从那里下载它们,也可以使用pip自动安装或升级: $ pip ...
您可以从那里下载它们,也可以使用pip自动安装或升级: $ pip install -U supervisor_cache安装软件包后,您必须修改您的supervisord.conf文件以注册 RPC 接口和supervisorctl插件: [rpcinterface:cache]...
使用Nginx_Supervisor_tornado搭建web服务.pdf
student_supervisor_console_app 一个新的Flutter应用程序。 入门 该项目是Flutter应用程序的起点。 如果这是您的第一个Flutter项目,那么有一些资源可以帮助您入门: 要获得Flutter入门方面的帮助,请查看我们的...
使用Nginx_Supervisor_tornado搭建web服务参考.pdf
centos7_安装_使用_supervisor1.安装和启动yum -y install supervisor添加项目vim /etc/supervisord
详细介绍Avaya公司CMS Supervisor 使用方法和配置技巧。
Ansible 角色:主管 在 CentOS 6.5 上安装最少的 Supervisor 要求 没有任何。 角色变量 默认值: supervisor_user: root # 默认用户 supervisor_sock: /var/run/supervisor.sock # 套接字...supervisor_logfile: /var/
Supervisor是用Python开发的一套通用的进程管理程序,能将一个普通的命令行进程变为后台daemon,并监控进程状态,异常退出时能自动重启。它是通过fork/exec的方式把这些被管理的进程当作supervisor的子进程来启动,...
Nginx_Supervisor_tornado搭建web服务
ubuntu--Supervisor的简单使用.docx
Supervisor是一个进程控制系统. 它是一个C/S系统(注意: 其提供WEB接口给用户查询和控制), 它允许用户去监控和控制在类UNIX系统的进程. 它的目标与launchd, daemontools和runit有些相似, 但是与它们不一样的是, 它...
关于显示电脑内存与MFC结合的VC程序,有助于MFC初学者。
Ubuntu 16系统下局域网环境下supervisor 安装包,按博客步骤完成安装与配置