pid_to_list()改变pid的值?

时间:2012-11-11 14:46:18

标签: erlang

我的代码如下:

PID = spawn_link(DistrNode, ......

io:format("~p debug1 ~n",[PID]),
io:format("~p debug2 ~n",[pid_to_list(PID)]),

我觉得:

  

< 10062.97.0> DEBUG1

     

“< 9453.97.0>” 中DEBUG2

我想把PID作为字符串抓取但不像上面那样改变值 - 这里发生了什么?我看起来将pid转换为原子,但没有功能。

我想得到“< 10062.97.0>”

编辑它spawn_link()不是spawn()这有什么不同?

1 个答案:

答案 0 :(得分:12)

正在发生的事情是:您正在节点X上执行对io:format()的两次调用,但PID是节点Y上的一个进程。对pid_to_list(PID)的调用会创建一个字符串,表示如何从节点引用PID X:“< 9453.97.0>”。然后将此字符串发送到I / O流,这不会进一步更改字符串。

但是,当您在节点X上调用io:format(“~p debug1~n”,[PID])时,格式字符串“~p debug1~n”和参数[PID]将按原样发送格式I / O请求到与终端通信的节点Z,并且PID在该节点上格式化(也使用pid_to_list(PID),生成< 10062.97.0>。注意,只有第一个数字不同; 10062是Z用于表示节点Y的数字,而X使用9453表示节点Y. 0表示第一个数字意味着它是本地节点上的pid。

相关问题