[erlang-questions] A Question About Processes

Hugo Mills hugo@REDACTED
Mon Mar 21 23:18:54 CET 2016


On Mon, Mar 21, 2016 at 11:35:04PM +0200, Dimitar Haralanov wrote:
> Hello everyone!
> 
> I am new to Erlang, but I’ve been really enjoying almost every bit of it. I stumbled upon
> something I am not exactly sure about. So far, my understanding is that processes are
> created by spawn()-ing them, however I think this is not the complete truth. I have the
> following contrived example:
> 
> -module(foo).
> -export([bar/0]).
> 
> bar() ->
>   io:format("Hello from ~p~n", [self()]),
>   spawn(fun loop/0).
> 
> loop() ->
>   receive
>     Message ->
>       io:format("PID ~p received ~p~n", [self(), Message]),
>       loop()
>   end.
> 
> and after running the code we get:
> 
> 1> Pid = foo:bar().
> Hello from <0.33.0>
> <0.35.0>
> 2> Pid ! hello.
> PID <0.35.0> received hello
> hello
> 3>
> 
> My question is - how is the process with PID <0.33.0> spawned? I’ve only read about
> using the erlang:spawn() function call, but I guess there are other implicit ways of starting
> new processes. Any further clarification would be really helpful. Thank you!

   When you call foo:bar(), that's running in the context of the
process that is running the shell. When you run it, it prints the pid
of the shell (0.33.0), and then spawns a process running the loop
function. That then prints its own pid (0.35.0) and the hello message.

   I think the thing you're missing is that the erlang shell is a
process in its own right, and that's the first pid you see in your
example.

   Hugo.

-- 
Hugo Mills             | If the first-ever performance is the première, is
hugo@REDACTED carfax.org.uk | the last-ever performance the derrière?
http://carfax.org.uk/  |
PGP: E2AB1DE4          |
-------------- next part --------------
A non-text attachment was scrubbed...
Name: signature.asc
Type: application/pgp-signature
Size: 836 bytes
Desc: Digital signature
URL: <http://erlang.org/pipermail/erlang-questions/attachments/20160321/824fd67f/attachment.bin>


More information about the erlang-questions mailing list