首页 > Erlang并发教程 > 9.5 Erlang并发编程-关于进程及错误处理的讨论
2013
11-19

9.5 Erlang并发编程-关于进程及错误处理的讨论

BACK TOP文章索引

  1. 讨论
  2. 共2条评论

讨论

当进程收到了一个“原因”不是normal的信号,默认行为是终止自己,并通知与它相连接的进程(见第??节)。通过使用连接和捕捉EXIT信号建立一个分层的系统是不难的。在这个系统最顶层的进程(应用进程)并不捕获EXIT信号。具有依赖关系的进程相互连接。底层进程(操作系统进程)捕获EXIT并且和需要监视的应用进程(见图8.2)建立连接。使用这种操作系统结构的例子是交换机服务器和电话应用程序,将在第??章讲述,第??章是它们的文件系统。

一个因为EXIT信号导致异常的应用进程,将会把信号发送给所有跟它处在通一进程集内的进程,因此整个进程集都会被杀死。连接到该进程集内应用程序的操作系统进程也会收到EXIT信号,并且会做一些清理工作,也可能重启进程集。

程序 8.2

loop(Processes) ->
    receive
        {From, {new_proc, Mod, Func, Args}} ->
            Id = spawn_link(Mod, Func, Args),
            From ! {keep_alive, started},
            loop([{Id, Mod, Func, Args}|Processes]);
        {'EXIT', Id, _} ->
            case lists:keysearch(Id, 1, Processes) of
                false ->
                    loop(Processes);
                {value, {Id, Mod, Func, Args}} ->
                    P = lists:delete({Id,Mod,Func,Args},
                    Processes),
                    Id1 = spawn_link(Mod, Func, Args),
                    loop([{Id1, Mod, Func, Args} | P])
            end
    end.

new_process(Mod, Func, Args) ->
    keep_alive ! {self(), {new_proc, Mod, Func, Args}},
    receive
        {keep_alive, started} ->
        true
    end.
../_images/8.2.png图8.2 操作系统和应用程序进程


9.5 Erlang并发编程-关于进程及错误处理的讨论》有 2 条评论

  1. 必须有pps才能看吗?

  2. 必须有pps才能看吗?

留下一个回复

你的email不会被公开。