根据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)吗?
答案 0 :(得分:4)
你在运行什么版本的erlang?我认为supervisor:terminate_child/2
仅允许从{R14B03开始的simple_one_for_one
主管。
作者:Siri Hansen日期:2011年4月12日星期二16:47:17 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.