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

被折叠的 条评论
为什么被折叠?



