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

Jeff Macdonald macfisherman@REDACTED
Tue Apr 14 13:32:24 CEST 2009

On Mon, Apr 13, 2009 at 10:05 PM, Bernard Duggan <bernie@REDACTED> wrote:
> 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.

Thanks! Light bulb went off with that explanation. Thanks again.

Jeff Macdonald
Ayer, MA

More information about the erlang-questions mailing list