Erlang:supervisor:terminate_child return 即使在最新版本中也有错误

Erlang: supervisor:terminate_child return error even in latest version

我正在尝试使用带有 simple_one_for_one RestartStrategy 的主管,我想我有最新版本的 Erlang,但是当我尝试执行 supervisor:terminate_child 时它仍然以 {error,simple_one_for_one}。根据 this 的回答,如果我的 Erlang 版本大于 R14B03,它应该可以工作,但我似乎无法在任何地方找到以 'R' 开头的版本。当我在 Erlang shell 中尝试 erlang:system_info(otp_release) 时,它 return 和 "24",我认为这是 2021 年 5 月发布的最新版本,但我看不出有其他原因这个问题。这是我的主管的样子:

-module(a_sup).
-behaviour(supervisor).

%% API
-export([start_link/0, init/1]).

start_link() ->
  {ok, supervisor:start_link({local,?MODULE}, ?MODULE, [])}.

init(_Args) ->
  RestartStrategy = {simple_one_for_one, 5, 3600},
  ChildSpec = {
    a_gen_server,
    {a_gen_server, start_link, []},
    permanent,
    brutal_kill,
    worker,
    [a_gen_server]
  },
  {ok, {RestartStrategy,[ChildSpec]}}.

您没有显示终止 child 的代码,但您是否指示 child 使用标识符而不是 pid 终止? terminate_child/2 documentation 表示:

If the supervisor is simple_one_for_one, Id must be the pid() of the child process. If the specified process is alive, but is not a child of the specified supervisor, the function returns {error,not_found}. If the child specification identifier is specified instead of a pid(), the function returns {error,simple_one_for_one}.

关于版本问题:24.2 是撰写本文时的当前 Erlang/OTP 版本。版本号过去以 'R' 开头,但以 Erlang/OTP 结尾 17.0.