2

私は次のようなコードを持っています:

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をatomに変換するように見えましたが、関数がありません。

「<10062.97.0>」を手に入れたかった

それを編集しますspawn()ではなくspawn_link()これは違いを生みますか?

4

1 に答える 1

13

何が起こっているのか: ノード 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 の形式のまま送信されます。端末と通信するノード Z に /O 要求を送信すると、そのノードで PID がフォーマットされます (また、pid_to_list(PID) を使用して <10062.97.0> を生成します)。最初の番号のみが異なることに注意してください。10062 は Zはノード Y を参照するために使用されますが、X はノード Y を参照するために 9453 を使用します。最初の数字として 0 は、ローカル ノードの pid であることを意味します。

于 2012-11-11T19:59:40.207 に答える