[erlang-questions] Erlang's process not killed by exit signalreasoned by "kill"
Thu Oct 29 14:36:37 CET 2009
2009/10/28 Joe Armstrong <>
> ---- a different way of describing the same thing
> The VM behaves as if there were 3 type of inter-process messages:
> (1, Data) tuples represent regular messages
> (2, Data) tuples represent signals
> 3 is the kill signal
> P ! X sends a type 1 message (1,X)
> exit(X) sends a type 2 message (2,X)
> exit(P, kill) sends a type 3 message
> exit(P, X) sends a type 2 message (2,X)
> on receiving a type 2 message if X != normal a normal process dies
> on receiving a type 2 message a system process converts this to a (1,X)
> on receiving a type 3 message the receiving process dies unconditionally
> --- end
Yes, this is clear and understandable. In these terms I suppose you could
describe the problem as:
When I do exit(Self, kill) it sends a type 3 'kill' signal to myself and
when I die I send type 2 'killed' signals to my linked processes. This is
consistent irrespective to whom I send the kill signal.
BUT when I do exit(kill) I send a type 2 signal with value 'kill' which
doesn't behave as a type 3 'kill' signal though the name is the same. This
is inconsistent, and I don't like inconsistencies. There are two different
solutions: either send out real type 3 kill signals; or send out type 2
'killed' signals as if I had received a type 3 signal. Both are consistent,
but which is best?
This is how I have read the problem.
More information about the erlang-bugs