首页 > Erlang并发教程 > 8.13 Erlang并发编程-Catch和退出信号捕获
2013
11-16

8.13 Erlang并发编程-Catch和退出信号捕获

BACK TOP文章索引

  1. Catch和退出信号捕获
  2. 共3条评论

Catch和退出信号捕获

catch作用域内求值和捕获进程退出信号是两种完全不同的错误处理机制。退出信号的捕获影响的是一个进程从其他进程处收到EXIT信号时的动作。catch只影响当前进程中由catch保护的表达式的求值。

执行程序7.5里的tt:test()会创建一个进程,这个进程匹配N(它的值是1)和2。这会失败的,引发信号{'EXIT',Pid,badmatch}被发送到执行tt:test()并且正在等待一个信号的进程。如果这个进程没有正在捕获exits,它也会非正常终止。

程序 7.5

-module(tt).
-export([test/0, p/1]).

test() ->
    spawn_link(tt, p,[1]),
    receive
         X ->
              X
    end.

p(N) ->
    N = 2.

调用程序7.5中的tt:test()将创建一个以2N(值为1)作匹配的链接进程。这会失败,并导致信号{'EXIT',Pid,badmatch}被发送至调用tt:test()的进程,该进程正在等待消息。要是这个进程不捕获退出信号,它就会异常退出。

如果我们执行的不是tt:test()而是catch tt:test(),结果一样:catch作用域外的另一个进程会发生匹配失败。在spawn_link(tt,p,[1])之前加上process_flag(trap_exit, true)tt:test()就会将收到的{'EXIT',Pid,badmatch}信号转换为一条消息。


8.13 Erlang并发编程-Catch和退出信号捕获》有 3 条评论

  1. lovefang 说:

    mark

  2. 菊花一松,屎喷一擂台

  3. 菊花一松,屎喷一擂台

留下一个回复

你的email不会被公开。