spawn without linking?

Joe Armstrong joe@REDACTED
Tue Apr 20 11:32:36 CEST 2004

> 	Hi, I'm pretty new to erlang, but one thing that seems to have caused 
> me problems in my toys so far is spawning a process without linking.  
> When is it a good idea to do such a thing?  Every time I've thought it 
> was, it just ended up covering up a bug that ended up being difficult 
> to track down.

Things that you want to be independent should not be linked together.

If you have two entirely different applications A and B you absolutely
do not want A to be linked to B.

If you have some error logger L then you *do* want L to be linked to A
and L to be linked to B. Errors in A or B should be reported by L.

Links are in the language for error detection purposes. When a process
terminates other processes in the system might need to know about this
so they can do something about the situation.

Suppose X dies - which other processes should be told about this?

Answer: If X evaluates link(Y) then Y will told if X dies (this is symmetric
so Y might evaluate link(X) for the same effect).

spawn_link could *almost* be defined like this:

	spawn_link(F) ->
		Pid = spawn(Fun),

But this is not correct (Why? - the process might die *between* the spawn
and the link) - so spawn_link does spawn and link atomically.

If you're new to Erlang I'd use spawn_link - as you build sexier applications
you should think *carefully* about what should happen when things die and try to
stop errors propagating between independent components.

You might like to look at the documentation for erlang:monitor (do > erl -man man erlang)
- this sets up a asymmetric link - which is often very useful.



> --
> SPY                      My girlfriend asked me which one I like better.
> pub  1024/3CAE01D5 1994/11/03 Dustin Sallings <dustin@REDACTED>
> |    Key fingerprint =  87 02 57 08 02 D0 DA D6  C8 0F 3E 65 51 98 D8 BE
> L_______________________ I hope the answer won't upset her. ____________

More information about the erlang-questions mailing list