2010-10-19 68 views

回答

5

我假設你要這樣對某種調試/反省而不是爲了在你的代碼一般使用:

erlang:process_info(Pid, registered_name). 

給你[]如果過程沒有本地註冊的名稱,如果有的話,還有{registered_name, Name}

+1

您也可以使用:proplists:get_value(registered_name,erlang:process_info(Pid))。直接返回名稱或未定義原子。儘管如此。 – 2010-10-20 08:33:25

+0

目的:我有一個gen_server作爲一組進程的主要行爲。但是,每個流程都需要有一些補充行爲,我通過一種「回調」模塊提供。當主管啓動時,它會創建主gen_server的多個副本,並以不同的名稱註冊每個副本。這些不同的名稱也將是回調模塊的名稱。我也可以傳入回調模塊作爲參數,但爲什麼打擾它是否已經可用。還是有一個更清潔的想法? – mwt 2010-10-20 16:05:29

+1

通過閱讀進程本身的註冊名來傳遞信息將會讓習慣於更典型的erlang代碼的人感到非常困惑 - 如果您希望獲得該信息,請將其明確傳遞並存儲在#state {}記錄中。你可以使用各種狡猾的機制來傳遞信息(過程字典,參數化模塊等),但是我建議不要這樣做,因爲它會使代碼難以遵循。 Erlang能夠通過查看它的代碼和它給出的參數來計算函數的效果是很好的。 – archaelus 2010-10-25 05:59:57