monitor vs link
Ulf Wiger
ulf@REDACTED
Sat Apr 2 18:06:49 CEST 2005
(I believe this post didn't make it on the first try.)
Den 2005-04-02 16:36:24 skrev asergey <serge@REDACTED>:
> Could you please explain the difference between erlang:monitor(process,
> Pid) and link(Pid) + process_flag(trap_exit, true)?
The most important differences are these:
- Links are two-way, while monitors are one-way. Thus,
links work well for cascading exits, but you can't
unobtrusively monitor another process using link
(the other process will be affected if your process
dies.)
- There is never more than one link between two processes,
while there can be several nested monitors. Consider
e.g. gen_server:call/2. It sets a monitor on the
server process, and removes it when it gets a reply.
In order to do that with link, the gen:call() function
would have to call process_info(self(), links) first,
and check the list of links to see whether there is
already a link to the server; then perhaps set a link,
and - if so - remove it afterwards (if there were a
link already, it mustn't remove it). Still, the server
must be able to handle EXIT messages from clients, which
is normally not what one wants.
/Uffe
More information about the erlang-questions
mailing list