gpt4 book ai didi

erlang - 确保 epmd 已启动

转载 作者:行者123 更新时间:2023-12-03 21:28:32 26 4
gpt4 key购买 nike

我有一个 eunit 测试,它生成一个唯一的节点名称并开始分发:

{A,B,C} = now(),
Nodename = list_to_atom(lists:flatten(io_lib:format(
"test-~b-~b-~b@localhost", [A, B, C]))),
{ok, _} = net_kernel:start([Nodename, shortnames]),

只要分布式 Erlang 节点之前在机器上运行过,因此 epmd 仍在运行,这就可以正常工作,但在构建服务器上,我不能假设是这种情况。

我通过将其添加到我的测试中解决了这个问题:
_ = os:cmd("epmd -daemon"),

但感觉就像一个黑客。有没有更好/更好的方法来确保在运行之前启动 epmd net_kernel:start ?

最佳答案

不,您无法确保以更简洁的方式启动 EPMD。

TL;博士

EPMD 是一个外部程序,implemented in C .虽然 net_kernel:start/1照顾 creating the net_sup supervisor ,它实际上不会触发 EPMD 守护进程,该守护进程必须显式启动。我看了一下-sname时EPMD是如何启动的选项在 erl 中指定命令和-惊奇,惊奇-我发现the epmd program is started via a system() C call .

关于erlang - 确保 epmd 已启动,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/18240319/

26 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com