关于erlang:link的一个死循环-有空研究
在做实验的过程中偶然遇见了这个问题
参数传递错误
link(1).** exception error: bad argumentin function link/1called as link(1)
link(Pid).
Pid存在的话返回true,否者返回
** exception error: no such process or port
in function link/1
called as link(<0.107.0>)
而如果我们又这样的一段代码(如下),在init中link一个进程,而当前进程挂载在supervisor下面,当link进程死掉的时候,自身重启,但是在init的地方又link原来死掉的进程
这个时候此进程就会一直重启下去,奇怪的是为什么可以起来,添加输出,显示link原来已经死掉的进程返回的是true,但是会不断地收到link进程死掉的消息
server2 receive exit:noproc, From:<0.97.0>,所以死循环产生了
start(X) ->
supervisor:start_child(e_test_sup2,
{lists:concat(["ee",X]),
{e_test_server2, start_link, []},
permanent, 30000, worker, [e_test_server2]}).
start(X, LinPid) ->
supervisor:start_child(e_test_sup2,
{lists:concat(["ee",X]),
{e_test_server2, start_link, [LinPid]},
permanent, 30000, worker, [e_test_server2]}).
start_link() ->
gen_server:start_link(?MODULE, [], []).
start_link(LinkPid) ->
gen_server:start_link(?MODULE, [LinkPid], []).
init([]) ->
erlang:process_flag(trap_exit, true),
{ok, #state{}};
init([LinkPid]) ->
erlang:process_flag(trap_exit, true),
W = link(LinkPid),
?T("+++++~p,~p",[LinkPid,W]),
{ok, #state{}}.
posted on 2012-08-17 11:24 fangjie008 阅读(359) 评论(0) 编辑 收藏 举报