根据 Erlang 文档,只要您传入进程的 PID 而不是子规范标识符,就可以将supervisor:terminate_child 函数与 simple_one_for_one 主管一起使用。然而,这在实践中似乎对我不起作用,相反该函数返回 {error, simple_one_for_one}。这是我所看到的:
(client-1@nick-desktop)9> supervisor:which_children(my_sup).
[{undefined,<0.544.0>,worker,[cf_server]}]
(client-1@nick-desktop)10> P.
<0.544.0>
(client-1@nick-desktop)11> supervisor:terminate_child(my_sup, P).
{error,simple_one_for_one}
我做错了什么,还是 Erlang 文档不准确?如果我无法使用 Supervisor:terminate_child 停止进程,我应该调用 exit(P, shutdown) 吗?
最佳答案
您运行的 erlang 版本是什么?我认为 supervisor:terminate_child/2
只允许用于从 R14B03 开始的 simple_one_for_one
主管。
Author: Siri Hansen Date: Tue Apr 12 16:47:17 2011 +0200
Allow supervisor:terminate_child(SupRef,Pid) for simple_one_for_one supervisor:terminate_child/2 was not allowed if the supervisor used restart strategy simple_one_for_one. This is now changed so that children of this type of supervisors can be terminated by specifying the child's Pid.
关于Erlang simple_one_for_one 主管终止子不工作,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7854270/