[erlang-questions] remote spawns and sending messages to the remote PID

Bernard Duggan bernie@REDACTED
Tue Apr 14 04:05:15 CEST 2009


Hi Jeff,
    The problem's pretty straightforward.
This:
> Now I spawn the counter on the bar node:
> (foo@REDACTED)3> S=spawn('bar@REDACTED',counter,run,[5]).
> <5734.41.0>
>   
Returns the process ID of the process executing the counter:run function.

Whereas this:
> (foo@REDACTED)5> T=counter:run(5).
> <0.48.0>
>   
Returns the return value of the counter:run function, which is a process
spawned from within that function.

Basically, you're getting confused between the return value of spawn(),
which is a function that creates a process, and the return value of
counter:run which is also a function that creates a process.  When you
call spawn('somenode', counter, run, [5]) it launches a process which
executes counter:run, which in turn launches another process (by virtue
of having a further call to spawn() in it).  It's the process returned
by the spawn() /inside/ counter:run() that you want to send the message
to.  Try this instead:

S = spawn('bar@REDACTED', counter, counter, [5, 0]).

That will bypass the extra call to spawn() and give you the PID you
actually want to send messages to.

Cheers,

B



More information about the erlang-questions mailing list