【发布时间】:2017-06-15 01:15:18
【问题描述】:
我尝试使用 gproc 注册一些具有家族名称的进程。 出于这个原因,我创建了一个包含两个功能的 gen_server,第一个是处理注册,第二个是查找注册进程的 Pid。 之后,我打开了两个 erlang 控制台,并注册了两个具有相同属性的进程 (每个控制台请求服务器注册一个进程) 我的服务器代码如下:
start_link() ->
gen_server:start_link({local, ?MODULE}, ?MODULE, [],[]).
init([]) -> gproc:start_link(), {ok, []}.
%% Synchronous call
register(Pid, Name) ->
gen_server:call(Pid, {register, Name}).
getpids(Pid, Name) ->
gen_server:call(Pid, {getpids, Name}).
handle_call({register, Name}, _From, State) ->
gproc:reg_or_locate({p,l,Name}),
{reply, Name, State};
handle_call({getpids, Name}, _From, State) ->
Pids = gproc:lookup_pids({p,l,Name}),
{reply, Pids, State}.
handle_info(Msg, State) ->
io:format("Unexpected message: pn",[Msg]),
{noreply, State}.
terminate(normal, State) ->
ok.
我注册了我的流程
server_name:register(PID,<<"test">>)
然后我用以下方式查找 pid:
server_name:getpids(PID,<<"test">>)
但是当我试图获取我的家庭进程的 pid 时(基本上我必须拉一个列表 有2个pid)我只有一个pid(每个控制台只是查找他自己注册的pid 并且不渲染在其他控制台注册的 pid)。
感谢您的帮助。 最好的问候。
【问题讨论】:
标签: erlang erlang-otp erlang-shell