2013-08-14 3 views
2

내가 유통 고유 한 노드 이름을 생성하고 시작하는 EUNIT 테스트가 시작이 분산 얼랑 노드만큼 잘 작동확인 EPMD는

{A,B,C} = now(), 
Nodename = list_to_atom(lists:flatten(io_lib:format(
    "[email protected]", [A, B, C]))), 
{ok, _} = net_kernel:start([Nodename, shortnames]), 

일부 이전 시간에 컴퓨터에서 실행되었습니다하고, 따라서 epmd는 여전히 실행 중이지만 서버를 구축 할 때 나는 그것이 사실이라고 추측 할 수 없습니다.

_ = os:cmd("epmd -daemon"), 

을하지만 해킹 같은 느낌 :

나는 나의 시험이를 추가하여 문제를 해결했다. net_kernel:start을 실행하기 전에 epmd가 시작되도록하는 더 좋고/좋은 방법이 있습니까?

+0

테스트를 어떻게 실행합니까? 'sname' 또는'name'을 제공함으로써 노드로서 erlang 프로세스를 시작하면 프로세스가 암시 적으로 epmd가 실행 중인지를 확인합니다. – troutwine

+0

나는 '철근 귀고리'를 통해 시험을하고있다. – legoscia

+0

나는 본다. 이름을 추가하는 데는 항상 [erl_opts] (https://github.com/basho/rebar/blob/master/rebar.config.sample#L24)가 있지만 그뿐 아니라 일종의 캐시입니다. – troutwine

답변

3

아니요, EPMD가 더 깨끗하게 시작되는지 확인할 수는 없습니다.

TL; DR

EPMD은 implemented in C 외부 프로그램이다. net_kernel:start/1creating the net_sup supervisor을 처리하지만 실제로는 명시 적으로 시작해야하는 EPMD 데몬을 트리거하지 않습니다. -sname 옵션이 erl 명령에 지정되어있을 때 EPMD가 시작된 방법을 살펴 보았습니다. 놀랍게도 놀랍게도 - 발견 된 것은 the epmd program is started via a system() C call입니다.