Erlang simple_one_for_one supervisor terminate_child无效

时间:2011-10-21 19:21:11

标签: erlang

根据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)吗?

1 个答案:

答案 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.