2009-05-26 95 views
3

我想使用Windows XP家庭版的-sname選項來啓動一個名爲Erlang的節點,但是當我運行ERL,它打印出很長的錯誤信息,我不明白,並退出:爲什麼我無法在Windows中啓動一個指定的Erlang節點?

>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代替似乎也沒有幫助。

回答

4

是的,你甚至可能需要重新啓動你的操作系統 - 爲了檢查是否是真的,你也可以簡單地啓動一個不同名稱的節點,通常最好使用完全限定名稱,例如:

ERL -name [email protected] -setcookie KILLER

然後,使用啓動另一個:

ERL -name [email protected] -setcookie KILLER

,並嘗試ping另一個節點:

net_adm:中國平安('[email protected]' )。

你應該得到'pong'信息。

接着使用

節點()。

查看所有可見節點。

+0

在嘗試啓動erl之前,我嘗試關閉所有的cmd窗口,但沒有奏效。按照你的建議重啓Windows之後,我能夠運行erl -sname foo。這是否意味着我有erl進程運行,甚至不知道它? – allyourcode 2009-05-27 05:07:36

+0

是的,不要忘記,一個erlang shell可以運行任意數量的進程,而不使用shell提供的高級功能,可能不明顯還有哪些/已經在運行,或者這些進程中的任何一個沒有正確終止,以便有剩餘的過程信息。 – none 2009-05-27 09:06:06

2

我認爲你會發現你已經開始使用該名稱的節點了。嘗試關閉所有Erlang控制檯窗口並重試。

2
  1. 你需要確保你不使用已註冊的名稱(當然):這包括由二郎已經聲稱任何名稱。

  2. 如果您是在同一臺計算機上啓動但使用不同的用戶,請確保您的Cookie相同。

相關問題