簡體   English   中英

停止Erlang主管?

[英]Stopping an Erlang supervisor?

我正在嘗試測試一個包含主管和兩個(不同)工作人員的應用程序。 我正在使用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. 發送shutdown信號以使主管殺死其子節點並退出:

     exit(Pid, shutdown). 

    您可能必須首先取消測試過程與測試的關聯。

  2. 監視進程,等待它退出:

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

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM