gpt4 book ai didi

erlang - 我可以陷阱退出( self (),杀死)?

转载 作者:行者123 更新时间:2023-12-04 00:44:35 30 4
gpt4 key购买 nike

当我阅读 learnyousomeerlang.com 上的一篇文章时,我有一个问题。 http://learnyousomeerlang.com/errors-and-processes

它说:

Exception source: exit(self(), kill)

Untrapped Result: ** exception exit: killed

Trapped Result: ** exception exit: killed

Oops, look at that. It seems like this one is actually impossible to trap. Let's check something.

但它不符合我用代码blow测试的内容:

  -module(trapexit).
-compile(export_all).
self_kill_exit()->
process_flag(trap_exit,true),
Pid=spawn_link(fun()->timer:sleep(3000),exit(self(),kill) end),
receive
{_A,Pid,_B}->io:format("subinmain:~p output:~p~n",[Pid,{_A,Pid,_B}])
end.

输出是:**4> trapexit:self_kill_exit().

subinmain:<0.36.0> 输出:{'EXIT',<0.36.0>,killed}**

并且不符合前面说的 Trapped Result: ** exception exit: killed 。哪个是对的???

最佳答案

作为参数传递给 spawn_link 的函数主体中对 self 的调用不会返回调用 spawn_link 的进程。它正在新生成的进程中进行评估,因此它将返回其 pid。进行以下更改。

-module(trapexit).
-compile(export_all).
self_kill_exit()->
process_flag(trap_exit,true),
Self=self(),
Pid=spawn_link(fun()->timer:sleep(3000),exit(Self,kill) end),
receive
{_A,Pid,_B}->io:format("subinmain:~p output:~p~n",[Pid,{_A,Pid,_B}])
end.

现在它应该按预期工作了。

10> c(trapexit).            
{ok,trapexit}
11> trapexit:self_kill_exit().
** exception exit: killed

这本书是对的。诱捕 exit(self(), kill) 是不可能的。

关于erlang - 我可以陷阱退出( self (),杀死)?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/13134078/

30 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com