停止Erlang主管?

时间:2014-01-15 13:17:10

标签: erlang

我正在尝试测试一个包含主管和两个(不同)工作人员的应用程序。我正在使用eunit,所以在我的设置和清理中,我得到了:

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

cleanup(Pid) ->
    exit(Pid, kill).

foo_sup:start_link/0定义为:

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

然而,当我的测试运行时,我得到{badmatch,{error,{already_started,<0.188.0>}}},这意味着我的主管仍在运行。

我如何:

  1. 指示主管停止自己及其所有孩子?
  2. 等待完成?

1 个答案:

答案 0 :(得分:7)

  1. 发送shutdown信号,让主管杀死其子女并退出:

    exit(Pid, shutdown).
    

    您可能必须先取消流程与测试的关联。

  2. 监控进程,等待它退出:

    Ref = monitor(process, Pid),
    receive
        {'DOWN', Ref, process, Pid, _Reason} ->
            ok
    after 1000 ->
            error(exit_timeout)
    end.