2

我有如下代码:

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

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

我得到这样的:

<10062.97.0> 调试1

“<9453.97.0>”调试2

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

我想得到“<10062.97.0>”

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

4

1 回答 1

13

发生的事情是这样的:您正在节点 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。

于 2012-11-11T19:59:40.207 回答