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

简易监督者

阅读更多

作为对进程监督机制的学习,现实现一个简易的监督者程序,监督者将监控一组进程,如果被监控的进程死掉,监督者将收到{'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光传输设备及其配件,包括主设备、机架、配件和线缆等,具体包括主子架、各种接口板、光收发模块、...

    最新大棚承包合同简易版菜园大棚承包合同书模板样式模板范文.docx

    本文将详细探讨一份特定的合同类型——菜园大棚承包合同,其简易版的模板将作为分析基础,深入解析合同的各个组成部分以及它们的重要性。 首先,合同法基础是理解任何合同的基石。合同是民事主体之间依法建立、变更...

    易语言BP神经网络简易

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

    最新个人包地合同简易版简易砖厂承包合同范本精编范文样本.docx

    甲方在监督乙方管理与维护设备方面拥有一定的权利,但不得干预乙方的生产经营方式,这体现了合同对双方合理权利的平衡。 乙方的义务与权利条款强调了乙方在承担生产过程中所有税费的同时,也享有自主经营的权利。这...

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

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

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

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

    最新简易正规聘用合同书简易不定期聘用合同样式WORD范本模板2021.docx

    本文将针对最新简易正规聘用合同书简易不定期聘用合同样式WORD范本模板2021.docx中的内容,深入分析其条款所包含的法律意义及应用,为读者提供一个关于劳动聘用关系的全面理解。 首先,合同法基础是构建任何合同的...

    分支机构合作协议简易模板.doc

    对于乙方来说,作为分支机构的负责人和运营者,必须承担更多实际的责任和义务。乙方需要负责分公司的设立过程,包括缴纳设立过程中产生的各种费用。一旦分公司成立,乙方还需全面负责日常运营,承担经营风险,并确保...

    HJ T 240-2005 确定点燃式发动机在用汽车简易工况法排气污染物排放限值的原则和方法.pdf

    该标准的发布,不仅为各地政府及相关部门提供了科学依据,也为汽车制造企业和在用汽车所有者提供了明确的排放要求。 HJ T 240-2005标准的出台,体现了国家层面对大气污染问题的高度重视。该标准以《中华人民共和国...

    风险管理简易手册.doc

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

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

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

    数据挖掘入门的简易资料

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

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

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

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

    在该简易合同中,首先明确了乙方作为实际土地使用权人和项目投资者的身份,承担着包括投资、核算、收益及风险在内的全部责任和义务。相反,甲方则主要提供名义使用权、技术咨询和业务指导,协助乙方办理相关手续。...

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

    随着社会经济的快速发展,个人间的借贷行为愈发频繁,民间借贷作为一种简便快捷的金融形式,为许多急需资金周转的个体经营者或个人提供了便利。为了规范借贷双方的权利与义务,确保借贷行为的合法性和安全性,制定一...

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

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

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

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

    libsvm简易入门

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

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

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

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

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

Global site tag (gtag.js) - Google Analytics