Erlang中出错后自动重启演示:模拟supervisor behavior

本文介绍如何使用Erlang编程语言创建一个基于消息传递的简单系统,包括进程管理、请求响应机制和异常处理。通过实现一个Erlang模块,演示了如何创建进程、发送和接收消息,以及在不同消息类型下的响应处理。

代码:

-module(supervise).
-compile([export_all]).

start_process() ->
    spawn(?MODULE, restarter, []).

restarter() ->
    process_flag(trap_exit, true),
    Pid = spawn_link(?MODULE, response, []),
    register(process, Pid),
    receive
        {'EXIT', Pid, normal} ->
            ok;
        {'EXIT', Pid, shutdown} ->
            ok;
        {'EXIT', Pid, _} ->
            restarter()
    end.

request(Value) ->
    Ref = make_ref(),
    process ! {self(), Ref, {Value}},
    receive
        {Ref, Responses} -> Responses
    after 2000 ->
        timeout
    end.

response() ->
    receive
        {From, Ref, {"Hi"}} ->
            From ! {Ref, "Hi, How are you ?"};
        {From, Ref, {"Hello"}} ->
            From ! {Ref, "Hello, How is it going ?"};
        {From, Ref, {"Bye"}} ->
            From ! {Ref, "Bye Bye !"};
        {From, Ref, {Other}} ->
            From ! {Ref, Other ++ " is good"}
    end,
    response().

执行:

Eshell V5.10.3

(test@mbp-108-on-01)1> supervise:start_process().

<0.136.0>

(test@mbp-108-on-01)2> supervise:request("Hello").

"Hello, How is it going ?"

(test@mbp-108-on-01)3> whereis(process).

<0.137.0>

(test@mbp-108-on-01)4> supervise:request("Hi").

"Hi, How are you ?"

(test@mbp-108-on-01)5> whereis(process).

<0.137.0>

(test@mbp-108-on-01)6> exit(whereis(process), kill).

true

(test@mbp-108-on-01)7> supervise:request("Restart").

"Restart is good"

(test@mbp-108-on-01)8> whereis(process).


评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值