如果我有一个进程A调用进程B中的函数(procB:func()。),并且func()在执行期间生成错误。流程B将终止,但流程A呢?在流程A中考虑以下内容:
案例1:
{ok, Reply} = procB:func().
案例2:
procB:func().
在两种情况下,进程A都会终止吗?或者只是因为不匹配的情况1?请注意,这两个流程没有关联。
提前致谢!
答案 0 :(得分:2)
没有在另一个进程中调用函数的事情,你可以向进程发送一条消息,然后它可以根据消息内容选择调用函数。
gen_servers以这种方式工作,你向gen_server发送一条消息,它对消息进行匹配,并选择是否应该调用call / cast / info / terminate函数。
假设您真的在谈论从A到B发送消息而B决定退出,那就是过程A是否链接/监控过程B。
如果您监控B,则会向您发送一条消息,说明B已关闭,原因如此。 如果你与B联系在一起,我相信如果B死亡的状态不是“正常”,那么你就会被杀死
A也可以设置标志trap_exit,这意味着即使链接和B死亡,A也会发送一条消息,告诉他应该死,然后你可以与该消息进行交互(即:你可以重启B,如果你选择的话)
learn you some erlang有一个关于它是如何工作的好教程。
答案 1 :(得分:1)
您无法在其他进程中调用函数。这就是Erlang的魅力:进程之间的所有通信都是通过消息传递进行的。人们有时会将模块与流程混淆。我甚至写了article about it。
例如流程A:
{fun_to_call, Args, self()}
(您需要self()
知道,在哪里回复receive
流程B:
这看起来像很多样板文件,因此这个确切的模式在gen_server