Erlang中实现进程间通信的方式是通过消息传递。每个进程都有一个唯一的进程标识符(PID),可以使用PID向其他进程发送消息,也可以接收其他进程发送的消息。当一个进程挂掉时,其他进程不会自动跟着挂掉,因为Erlang采用了进程隔离的机制,每个进程都独立运行在自己的虚拟机中。如果一个进程挂掉了,其他进程可以通过监视(link)机制来检测到该进程的退出,并做出相应的处理。例如,可以重新启动一个新的进程来替代挂掉的进程。
所以,当一个进程挂掉了,其他进程可以通过监视机制来得知,然后根据需要进行相应的处理,而不会自动跟着挂掉。这种进程隔离的机制使得Erlang具有很好的容错性和鲁棒性,能够保证系统的稳定性和可靠性。
进程的双向监控link
-module(link).
-author("DQ").
%% API
-export([start/0]).
start() ->
Pid = spawn(fun() ->loop() end),
Pid2 = spawn(fun() ->loop_link(Pid) end),
io:format("Pid ~p~nPid2 ~p~n", [Pid, Pid2]).
loop_link(Pid) ->
process_flag(trap_exit, true),
erlang:link(Pid),
receive
Msg ->
io:format("pid exit: ~p~n", [Msg])
end.
loop() ->
process_flag(trap_exit, true),
receive
Msg ->
io:format("pid2 exit: ~p~n", [Msg])
end.
测试结果