【问题标题】:gen_server: what is `Mon` in `start_monitor/4`?gen_server:什么是`start_monitor/4`中的`Mon`?
【发布时间】:2021-11-06 19:36:22
【问题描述】:

OTP 文档说gen_server:start_monitor/4 的签名是:


start_monitor(ServerName, Module, Args, Options) -> Result
OTP 23.0
Types
ServerName = {local,Name} | {global,GlobalName}
  | {via,Module,ViaName}
 Name = atom()
 GlobalName = ViaName = term()
Module = atom()
Args = term()
Options = [Option]
 Option = {debug,Dbgs} | {timeout,Time} | {hibernate_after,HibernateAfterTimeout} | {spawn_opt,SOpts}
  Dbgs = [Dbg]
   Dbg = trace | log | statistics | {log_to_file,FileName} | {install,{Func,FuncState}}
  SOpts = [term()]
Result = {ok,{Pid,Mon}} | ignore | {error,Error}
 Pid = pid()
 Error = {already_started,Pid} | term()

Mon 是什么?文档只是说:

“Mon 是对设置监控服务器的监控器的引用”

所以现在我知道Mon 是一个监视器并且它正在监视,但它的类型是什么?

阅读erlang.erl,我发现:

-type registered_name() :: atom().
-type registered_process_identifier() :: registered_name() | {registered_name(), node()}.
-type monitor_process_identifier() :: pid() | registered_process_identifier().

Monpid() | atom() | {atom(), node()} 的类型也是?

【问题讨论】:

    标签: erlang gen-server


    【解决方案1】:

    Mon是监视器的引用:

    monitor_return({{ok, Pid}, Mon}) when is_pid(Pid), is_reference(Mon) ->
        %% Successful start_monitor()...
        {ok, {Pid, Mon}};
    

    (代码为here

    【讨论】:

    • 谢谢!所以Monreference()
    • @MaxHeiber 是的,它是reference()
    猜你喜欢
    • 2018-04-15
    • 2020-08-20
    • 2021-07-11
    • 2012-04-18
    • 2016-05-28
    • 2021-01-15
    • 2014-08-09
    • 2016-06-28
    • 2022-01-16
    相关资源
    最近更新 更多