gen_server:啥是`start_monitor/4`中的`Mon`?
Posted
技术标签:
【中文标题】gen_server:啥是`start_monitor/4`中的`Mon`?【英文标题】: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().
Mon
pid() | atom() | atom(), node()
的类型也是?
【问题讨论】:
【参考方案1】:Mon
是监视器的引用:
monitor_return(ok, Pid, Mon) when is_pid(Pid), is_reference(Mon) ->
%% Successful start_monitor()...
ok, Pid, Mon;
(代码为here)
【讨论】:
谢谢!所以Mon
是reference()
?
@MaxHeiber 是的,它是reference()
以上是关于gen_server:啥是`start_monitor/4`中的`Mon`?的主要内容,如果未能解决你的问题,请参考以下文章