ここからの短いコピー:
exit(Pid, Reason) -> trueタイプ:
Pid=
pid()理由=term()終了理由を含む終了信号を
Reasonプロセスに送信しますPid。次の動作は、理由がまたは以外の用語である場合に適用され
normalますkill。
Pidが出口をトラップしていない場合、Pidそれ自体が出口理由で終了しますReason。が出口をトラップしている場合Pid、出口信号はメッセージに変換され{'EXIT', From, Reason}、のメッセージキューに配信されますPid。From終了信号を送信したプロセスのpidです。も参照してくださいprocess_flag/2。
Reasonがアトムの場合normal、Pid終了しません。出口をトラップしている場合、出口信号はメッセージに変換され、{'EXIT', From, normal}そのメッセージキューに配信されます。
Reasonがアトムの場合kill、つまりexit(Pid, kill)が呼び出された場合、トラップできない終了信号が送信されPid、終了理由で無条件に終了しますkilled。
として使用した場合のexit/2関数とその動作を試してみました。self()PidnormalReason
Erlang R15B03 (erts-5.9.3) [source] [64-bit] [smp:8:8] [async-threads:0] [hipe] [kernel-poll:false]
Eshell V5.9.3 (abort with ^G)
1> self().
<0.32.0>
2> exit(self(), normal).
** exception exit: normal
3> self().
<0.35.0>
「通常の」終了メッセージのみがシェルプロセスに送信されるので、終了する理由がないというのは事実ではないでしょうか。
同様に:
4> spawn(fun() -> receive Pid -> Pid ! ok end end).
<0.38.0>
5> exit(v(4), normal).
true
6> v(4) ! self().
<0.35.0>
7> flush().
Shell got ok
ok
だが:
8> spawn(fun() -> exit(self(), normal), receive _ -> ok end end).
<0.43.0>
9> is_process_alive(v(8)).
false