我的代码如下:
PID = spawn_link(DistrNode, ......
io:format("~p debug1 ~n",[PID]),
io:format("~p debug2 ~n",[pid_to_list(PID)]),
Run Code Online (Sandbox Code Playgroud)
我觉得:
<10062.97.0> debug1
"<9453.97.0>"debug2
我想把PID作为字符串抓取但不像上面那样改变值 - 这里发生了什么?我看起来将pid转换为原子,但没有功能.
我想得到"<10062.97.0>"
编辑它spawn_link()不是spawn()这有什么不同?
Ric*_*rdC 12
发生的事情是:你在节点X上执行对io:format()的两次调用,但PID是节点Y上的一个进程.对pid_to_list(PID)的调用创建一个字符串,表示如何从节点X引用PID:" <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.