阻止Erlang主管?

阻止Erlang主管?,erlang,Erlang,我正在尝试测试我的一个应用程序,它由一个主管和两个(不同的)工作人员组成。我正在使用eunit,因此在我的设置和清理中,我有: setup() -> {ok, Pid} = foo_sup:start_link(), Pid. cleanup(Pid) -> exit(Pid, kill). foo\u sup:start\u link/0定义为: start_link() -> supervisor:start_link({local, ?

我正在尝试测试我的一个应用程序,它由一个主管和两个(不同的)工作人员组成。我正在使用eunit,因此在我的设置和清理中,我有:

setup() ->
    {ok, Pid} = foo_sup:start_link(),
    Pid.

cleanup(Pid) ->
    exit(Pid, kill).
foo\u sup:start\u link/0
定义为:

start_link() ->
    supervisor:start_link({local, ?MODULE}, ?MODULE, []).
然而,当我的测试运行时,我得到
{badmatch,{error,{ready_start,}}}
,这意味着我的主管仍在运行

我如何:

  • 向主管发出停止自己和所有孩子的信号
  • 等它完成
  • 发送
    关闭
    信号,使主管杀死其子项并退出:

    exit(Pid, shutdown).
    
    您可能必须首先取消流程与测试的链接

  • 监视进程,以等待其退出:

    Ref = monitor(process, Pid),
    receive
        {'DOWN', Ref, process, Pid, _Reason} ->
            ok
    after 1000 ->
            error(exit_timeout)
    end.
    
  • 不要使用“关机”,而是使用“正常”,这样就不会使测试过程中断。