2010-10-19 69 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