catch link(Pid) when trapping exits
Raimo Niskanen
raimo@REDACTED
Thu Oct 27 10:26:48 CEST 2005
francesco@REDACTED (Francesco Cesarini Erlang Training & Consulting) writes:
> In a process trapping exists,
>
> catch link(Pid)
>
> of a non existing pid returns true. If we are not trapping exists, the
> return value is {'EXIT', {noproc, .....}}
>
>From erl -man erlang:
link(Pid) -> true
Types
Pid = pid() | port()
Creates a link between the calling process and another
process (or port) Pid, if there is not such a link
already. If a process attempts to create a link to
itself, nothing is done. Returns true.
Does not fail, but sends an exit signal with reason
noproc to the calling process if Pid does not exist.
This means that, unless the calling process is trapping
exits (see process_flag/2), it will exit if it tries to
link to a non-existing process.
It is all there, really. Only it was written before exceptions
were invented as a concept in Erlang, uses the term
"exit signal" in a confusing way and lies about "does not fail".
Ok, it is maybe dead wrong, but the intention was right.
So, what happens is:
link(Pid) -> true if Pid exists or the caller has
process_flag(trap_exit, true).
error(noproc) otherwise
The enclosing catch evaluates to {'EXIT',{noproc,Stackdump}}
for error(noproc).
Weird behaviour, in my opinion..
> Looking into this "feature", my guess is that executing exit(Pid,
> Reason) when trapping exists returns true. I would however expect the
> same behavior in both cases, however....
>
> 11> catch exit(hello).
> {'EXIT',hello}
> 12> catch exit(self(), hello).
> true
> 13> flush().
> Shell got {'EXIT',<0.44.0>,hello}
> ok
>
> Is this a bug or a feature?
>
This is a feature.
exit/1 causes an exception of class 'exit' in the calling process,
which when enclosed in a catch evaluates to
{'EXIT',Reason} - no stacktrace since it is of class 'exit'.
exit/2 sends an exit signal to the target process. And if
the target process (self()) traps exits, it becomes
a regular message.
> Francesco
> --
> http://www.erlang-consulting.com
>
--
/ Raimo Niskanen, Erlang/OTP, Ericsson AB
More information about the erlang-questions
mailing list