我的代码如下:
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()这有什么不同?
答案 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。