【问题标题】:Why is the 'monitor' option used in erlang:spawn_opt disabled?为什么 erlang:spawn_opt 中使用的 'monitor' 选项被禁用?
【发布时间】:2012-09-13 08:26:28
【问题描述】:

我碰巧读到一个名为monitorspawn_opthttp://www.erlang.org/doc/man/erlang.html#spawn_opt-2

但是当我使用它时,我得到了这个:

1> gen_server:start(some_module, [], [{spawn_opt, [monitor]}]).
** exception error: bad argument
     in function  proc_lib:check_for_monitor/1 (proc_lib.erl, line 182)
     in call from proc_lib:spawn_opt/4 (proc_lib.erl, line 161)
     in call from proc_lib:start_link/5 (proc_lib.erl, line 317)
2> 

这就是 OTP 中 proc_lib.erl 的第 182 行附近发生的情况:

%% OTP-6345
%% monitor spawn_opt option is currently not possible to use
check_for_monitor(SpawnOpts) ->
    case lists:member(monitor, SpawnOpts) of
        true ->
            erlang:error(badarg);
        false ->
            false
    end.

monitor 选项被故意禁用,但我不明白为什么。我搜索了一下 在OTP-6345,原来它来自发行说明,我也找不到足够的信息:http://www.erlang.org/download/otp_src_R11B-3.readme

我们一直手动执行 spawn-then-monitor 步骤,没有任何问题,但为什么 OTP 代码选择完全忽略 monitor 选项?有没有潜在的种族 条件或任何其他陷阱?

【问题讨论】:

    标签: process erlang monitor spawn


    【解决方案1】:

    该修复与this email 相关,proc_lib 的功能似乎有一些重叠,并且监视哪个搞砸了。

    【讨论】:

    • 这确实很微妙,不会在我们的程序中造成任何实际问题,但很高兴知道细节。非常感谢。
    猜你喜欢
    • 1970-01-01
    • 2012-01-11
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2013-12-30
    • 2010-11-22
    相关资源
    最近更新 更多