このコードを Erlang コンソールで実行すると
Pid = spawn(fun() -> "foo" end),link(Pid),receive X -> X end.
次のエラーが表示されます。
** exception error: no such process or port
in function link/1
called as link(<0.71.0>)```
このコードを Erlang コンソールで実行すると
Pid = spawn(fun() -> "foo" end),link(Pid),receive X -> X end.
次のエラーが表示されます。
** exception error: no such process or port
in function link/1
called as link(<0.71.0>)```
これは、生成したプロセスが非常に迅速に終了するために発生します。文字列を「返す」だけであり (新しいプロセスの呼び出しスタックの最上位関数であるため、戻り値はどこにも行きません)、終了する可能性が非常に高くなります。エミュレーターがlink
呼び出しに到達する前に。
終了する前にプロセスをスリープ状態にすることで、成功する可能性を高めることができます。
2> Pid = spawn(fun() -> timer:sleep(1000), "foo" end),link(Pid).
true
ただしreceive
、生成されたプロセスはメッセージを送信しないため、この例の式は何も受信しない可能性が高いことに注意してください。また、プロセスが正常に終了するため、リンクもメッセージを生成しません。出口をトラップしないでください。次のようなことをしたいかもしれません:
Parent = self(),
spawn(fun() -> Parent ! "foo" end),
receive X -> X end.
それは を返します"foo"
。