为什么我无法在Windows中启动一个指定的Erlang节点?
我试图在Windows XP Home中使用-sname选项来启动一个命名的Erlang节点,但是当我运行erl时,它会打印出一条我不明白的长错误消息,然后退出:
>erl -sname allyourcode {error_logger,{{2009,5,25},{16,20,57}},"Protocol: ~p: register error: ~p~n",["in et_tcp",{{badmatch,{error,econnrefused}},[{inet_tcp_dist,listen,1},{net_kernel,s tart_protos,4},{net_kernel,start_protos,3},{net_kernel,init_node,2},{net_kernel, init,1},{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}]} {error_logger,{{2009,5,25},{16,20,57}},crash_report,[[{initial_call,{net_kernel, init,['Argument__1']}},{pid,},{registered_name,[]},{error_info,{exit,{er ror,badarg},[{gen_server,init_it,6},{proc_lib,init_p_do_apply,3}]}},{ancestors,[ net_sup,kernel_sup,]},{messages,[]},{links,[#Port,]},{dicti onary,[{longnames,false}]},{trap_exit,true},{status,running},{heap_size,610},{st ack_size,24},{reductions,490}],[]]} {error_logger,{{2009,5,25},{16,20,57}},supervisor_report,[{supervisor,{local,net _sup}},{errorContext,start_error},{reason,{'EXIT',nodistribution}},{offender,[{p id,undefined},{name,net_kernel},{mfa,{net_kernel,start_link,[[allyourcode,shortn ames]]}},{restart_type,permanent},{shutdown,2000},{child_type,worker}]}]} {error_logger,{{2009,5,25},{16,20,57}},supervisor_report,[{supervisor,{local,ker nel_sup}},{errorContext,start_error},{reason,shutdown},{offender,[{pid,undefined },{name,net_sup},{mfa,{erl_distribution,start_link,[]}},{restart_type,permanent} ,{shutdown,infinity},{child_type,supervisor}]}]} {error_logger,{{2009,5,25},{16,20,57}},std_info,[{application,kernel},{exited,{s hutdown,{kernel,start,[normal,[]]}}},{type,permanent}]} {"Kernel pid terminated",application_controller,"{application_start_failure,kern el,{shutdown,{kernel,start,[normal,[]]}}}"} Crash dump was written to: erl_crash.dump Kernel pid terminated (application_controller) ({application_start_failure,kerne l,{shutdown,{kernel,start,[normal,[]]}}})
我想包含erl_crash.dump文件,但我不知道这样做的好方法,因为它很长。
起初,我认为我遇到了防火墙问题,因为我第一次尝试这样做时,我的防火墙询问我是否允许使用不同的程序,这是我做的; 但是,即使在禁用防火墙之后,我仍然遇到同样的问题。
使用-name代替似乎也没有帮助。
是的,你甚至可能不得不重新启动你的操作系统 - 为了检查这是否是真的,你也可以简单地启动一个不同名称的节点,通常最好使用完全限定名称,比如:
erl -name rambo@127.0.0.1 -setcookie KILLER
然后,使用以下命令启动另一个:
erl -name terminator@127.0.0.1 -setcookie KILLER
并尝试ping其他节点:
net_adm:中国平安('rambo@127.0.0.1' )。
你应该得到一个'pong'信息。
下次使用
节点()。
查看所有可见节点。
我认为你会发现你已经用这个名字开始了一个节点。 尝试关闭所有Erlang控制台窗口并重试。
您需要确保您没有使用已经注册的名称(当然):这包括Erlang已经声明的任何名称。
如果您在同一台计算机上启动但使用不同用户,请确保您的Cookie相同。