如何知道Erlang中的进程只知道用于启动它的模块名称?

时间:2010-02-21 18:27:54

标签: erlang

如何只知道用于启动它的模块名称,如何终止Erlang中的进程?

3 个答案:

答案 0 :(得分:9)

如果是简单的调试,你可以运行pman:start(),只需查看进程(双击一个条目即可查看初始调用等详细信息)。然后你可以直接从pman中杀死它。

否则,您可以使用erlang:processes()列出系统中的所有进程(可怕,我知道),并在每个进程上运行erlang:process_info(Pid,initial_call)以找到正确的进程。完成后,只需使用exit(Pid,kill)。

答案 1 :(得分:4)

没有办法做到这一点。

您最好的选择是根据注册名称和/或流程的初始调用进行推测。

答案 2 :(得分:1)

您仍然可以通过其他方式找到该过程,即使它没有注册。例如,您可以查看像pman(pman:start())这样的进程监视器,看看是否在那里找到它。 pman允许您过滤许多标准,这可能会导致您进入正确的过程。或者你可以启动调试器,在模块中安装断点,下次进程执行某些操作时,它会被中断,调试器会弹出一个窗口,在标题栏中你可以读取进程的PID被打断了。

获得PID后,可以使用pid(A,B,C)。从中伪造一个PID对象,并用它来杀死进程。