为什么在erlang:spawn_opt中使用'monitor'选项被禁用?

问题描述:

我碰巧读到一个spawn_opt称为monitorhttp://www.erlang.org/doc/man/erlang.html#spawn_opt-2为什么在erlang:spawn_opt中使用'monitor'选项被禁用?

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

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

我们手工做的产卵,然后监视器的步骤所有的时间没有任何问题,但为什么OTP代码是否选择完全忽略monitor选项?有潜在的种族 条件或任何其他陷阱?

的修补程序涉及到this email,也似乎是在proc_lib的功能有些重叠和监视的螺丝了这一点。

+0

这确实是微妙的,不会引起我们的程序中的任何实际问题,但良好的知道的细节。非常感谢。 – l04m33