`
stworthy
  • 浏览: 525579 次
  • 来自: ...
社区版块
存档分类
最新评论

简易监督者

阅读更多

作为对进程监督机制的学习,现实现一个简易的监督者程序,监督者将监控一组进程,如果被监控的进程死掉,监督者将收到{'EXIT',Pid,Why}信号,拒此可以对被监督进程进行重启操作。

监督者启动时首先注册进程名,然后进入消息监听:

start() ->
    register(keep_alive, spawn(fun start1/0)).
    
start1() ->
    process_flag(trap_exit, true),
    loop([]).

 

接下来先看一下启动被监控进程的代码:

start_process(M, F, A) ->
    case apply(M, F, A) of
        {ok, Pid} when is_pid(Pid) ->
            link(Pid),
            io:format("start a process:~w~n", [Pid]),
            {ok, Pid};
        Pid when is_pid(Pid) ->
            link(Pid),
            io:format("start a process:~w~n", [Pid]),
            {ok, Pid}
    end.

 

下面看一下监控者消息监听的代码:

loop(Processes) ->
    receive
        {From, {new_proc, M, F, A}} ->
            {ok, Pid} = start_process(M, F, A),
            From ! {keep_alive, started},
            loop([{Pid, M, F, A}|Processes]);
        {'EXIT', Pid, _} ->
            case lists:keysearch(Pid, 1, Processes) of
                false ->
                    loop(Processes);
                {value, {Pid, M, F, A}} ->
                    P = lists:delete({Pid, M, F, A}, Processes),
                    {ok, Pid1} = start_process(M, F, A),
                    loop([{Pid1, M, F, A}|P])
            end
    end.

 

收到被监控者退出消息后,说明被监控者已经死掉,这时可以重启动被监控进程。

注册新的被监控进程可以通过以下函数完成:

new_process(M, F, A) ->
    keep_alive ! {self(), {new_proc, M, F, A}},
    receive
        {keep_alive, started} -> true
    end.

 

 

Erlang中杜绝防御性编程,让其他进程来修复错误的处理哲学很有特色。简易监督者能够使编写的程序处理稳定运行状态,对于暂时性的网络中断或程序错误,在编程的时候将不需在代码中TRY来TRY去了。

 

分享到:
评论

相关推荐

    简易招标文件

    14. **监督机制**:设有监督电话,接受对招标过程的监督举报。 【招标货物清单】 招标的调度通信设备详细列出了SDH光传输设备及其配件,包括主设备、机架、配件和线缆等,具体包括主子架、各种接口板、光收发模块、...

    易语言BP神经网络简易

    首先,BP(Back Propagation)神经网络是一种广泛应用的人工神经网络模型,主要用于监督学习中的非线性函数拟合。它通过反向传播误差来调整权重,以达到优化网络性能的目的。在易语言中实现BP神经网络,可以帮助初学...

    最新个人纯劳务合同范本简易劳务聘用合同范本DOC样式版精品.docx

    1. **劳务合同的定义**:劳务合同是指劳动者与用工单位之间确立劳动关系,明确双方权利和义务的协议。在这种合同中,个人(乙方)为另一方(甲方)提供非全职或非全日制的劳动服务,通常不涉及长期雇佣关系。 2. **...

    最新正规简易劳务合同简易劳务聘用合同样书WORD文件模板.docx

    1. **劳务合同**:劳务合同是一种劳动合同,用于明确雇主(甲方)与劳动者(乙方)之间的权利和义务。在这个案例中,甲方是一家有限公司,乙方是被聘请的店长。 2. **聘用期限**:合同规定了明确的聘用期限,例如...

    风险管理简易手册.doc

    这本《风险管理简易手册》旨在引导读者理解和掌握风险管理的基本概念和实践方法。 首先,风险的定义随着时间的推移和理论的发展而演变。传统的风险定义是损失的不确定性,而现代定义则强调预期与实际结果之间的差异...

    最新简易版劳务合同简易劳务聘用合同模板WORD样篇可编辑.docx

    《最新简易版劳务合同》是企业在聘用劳动者时常用的一种法律文件,旨在明确雇主与雇员之间的权利和义务,保障双方的合法权益。以下是对该合同模板关键知识点的详细解析: 1. **聘用关系**:合同中明确了聘请方...

    数据挖掘入门的简易资料

    以下是对"数据挖掘入门的简易资料"的详细解读: 一、基本概念 1. 数据挖掘:数据挖掘是指从大型数据集中发现有价值的模式、规律和知识的过程。它不仅涉及数据的清洗、预处理,还包括模式识别和结果解释。 2. 数据...

    食品供货合同简易协议书.docx

    这份合同模板旨在确保食品安全,保障消费者权益,同时也保护了供需双方的合法权益。以下是该协议书中涉及的主要知识点: 1. **资质证明**: - 乙方作为供货商,必须向甲方提供其合法有效的营业执照和卫生许可证的...

    电子政务-变电站用可拆卸式简易吊机.zip

    通过电子政务平台,可以实现设备信息的数字化管理,包括设备的型号、制造商、安装日期、维修记录等,这些数据可以快速检索和分析,帮助决策者做出更科学的维护决策。 其次,电子政务可以优化吊机的使用和调度。通过...

    房屋装修合同范本简易版.pdf

    - **甲方**:通常指房屋的所有者或委托方。 - **乙方**:通常指装修公司或个人,即提供装修服务的一方。 - **签订日期**:合同正式生效的时间。 ##### 2. 施工条件 - **甲方应提供的条件**: - 提供符合装修条件的...

    最新个人公司承包合同简易公司承包合同书DOC任意编辑版.docx

    《最新个人公司承包合同简易公司承包合同书》是企业或个人在进行承包业务时使用的一种法律文件,旨在明确双方的权利和义务,确保合同的公正性和合法性。以下是对合同内容的详细解析: 首先,合同的主体是两个:发包...

    房地产开发挂靠合同简易版_1.doc

    1. **权利与义务**:乙方是实际的土地使用权人和项目投资者,承担项目的全部责任和义务,包括投资、核算、收益和风险。甲方则提供名义上的使用权、技术咨询和业务指导,协助办理相关手续。 2. **费用支付**:乙方需...

    libsvm简易入门

    ### libsvm简易入门知识点 #### 1. 支持向量机(SVM)简介 支持向量机(Support Vector Machine, SVM)是一种监督学习模型,主要用于分类与回归分析。...希望这篇简易入门教程能够帮助初学者更好地理解和使用libsvm。

    最新简易投资合作协议委托投资协议一DOC热门文档.docx

    《最新简易投资合作协议委托投资协议》是一份详细规范的投资合作法律文件,旨在明确投资者(甲方)与被委托方(乙方)在投资过程中的权益和责任。以下是对协议内容的详细解读: 1. **委托投资金额**:根据协议,...

    【合同大全】采掘业简易劳动合同书(参考文本.doc

    《采掘业简易劳动合同书》是一份针对采掘业从业人员的劳动合同参考文本,旨在规范雇主与员工之间的劳动关系,保障双方权益。以下是该合同书涉及的主要知识点: 1. **劳动合同法依据**:合同的签订遵循《劳动法》和...

    最新汽车抵押借款简易合同通用版车辆抵押借款合同模板WORD文档格式.docx

    《最新汽车抵押借款简易合同通用版》是针对个人或企业之间进行汽车抵押借款时使用的一份标准合同模板,旨在明确借贷双方的权利与义务,保障交易的合法性和安全性。以下是合同中的关键知识点: 1. **合同主体**:...

    最新聘用合同书通用版简易固定期限聘用合同样书WORD格式范文.docx

    这份【最新聘用合同书通用版简易固定期限聘用合同样书】是针对总经理的职位,具有以下关键知识点: 1. **聘用内容**:甲方(公司)聘请乙方(应聘者)担任总经理职务,负责公司的整体经营管理。 2. **聘用期限**:...

    最新汽车抵押借款简易合同标准版车辆抵押借款合同范本WORD格式范文.docx

    本文提供的是一个“最新汽车抵押借款简易合同”的标准版,主要涵盖了汽车抵押借款过程中涉及到的法律条款和操作流程。这份合同适用于个人或企业之间通过汽车作为抵押物进行借款的情况。 1. **合同主体**:合同涉及...

    最新个人承包工程合同下载简易内部承包合同样本WORD格式样本.docx

    - 监督承包者完成国家和集体的任务。 - 分配给承包者相应的农业生产资源。 - 公布财务信息并接受承包者的监督。 6. **违约责任**: - 承包者未履行义务将面临罚款或其他处罚。 - 发包方未及时提供资源也需支付...

    简易个人民间借款合同范本_.docx

    在这种交易中,借款人通常是个体经营者,贷款人可能是个人,而非银行或其他正式金融机构。 2. **合同要素**:合同包含了借款用途、金额、利息、期限、条款变更、权利义务、保证条款、争议解决方式等内容,这些都是...

Global site tag (gtag.js) - Google Analytics