我在 yaws.conf 中有一个 yaws runmod 定义为:
runmod = sg_app
该模块包含一个导出函数:
start()->
io:format("~p start~n", [ sg_sup:start_link() ]).
当我启动雅司病时,我看到对 runmod 的调用:
=INFO REPORT==== 29-Oct-2015::16:46:51 === sync call sg_app:start
{ok,<0.61.0>} start
但是主管并不存在:
1> whereis(sg_sup).
undefined
如果我手动调用 runmod:start,主管就会挂起。
2> sg_app:start().
{ok,<0.73.0>} start
ok
3> whereis(sg_sup).
<0.73.0>
我做错了什么?
最佳答案
您的 runmod 的 start/0
函数正在使用 start_link/0
启动主管,这意味着它正在链接到父进程。当该进程终止时,由于链接,它会导致您的 runmod 进程随之关闭。 runmod
功能不是为启动监督树而设计的。
您可以考虑使用 yapp
,它允许您的代码作为常规 Erlang 应用程序在与 Yaws 相同的 Erlang 节点中运行,并注册为让 Yaws 将请求分派(dispatch)到其中。
关于erlang - 无法从 yaws runmod 启动主管,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/33426727/