我已经制作了一个符合OTP标准的应用程序,我有一个gen_server和一个主管.我也有一个脚本来启动它们.
我的脚本包含这样的内容.erl -pa module_name/ebin -name abc @ hostname -setcookie test -s module_sup start_link()
这不会启动主管.但是当我在shell中执行module_sup:start_link()时,它可以工作.
此外,当我执行erl -pa module_name/ebin -name abc @ hostname -setcookie test -s module_srv start_link()即没有主管的服务器时,服务器启动.
那么,我在这里做错了什么.我们不允许以这种方式启动主管.
任何帮助都会受到高度关注.
Thanx,威尔逊
小智 5
supervisor:start_link/2创建一个指向其调用进程的链接.当调用进程退出时,主管将被删除.
erl -s module_sup start_link 正在启动主管,但它被杀死,因为你的启动函数在它自己的进程内运行,一旦函数退出就会死掉.
您可以观察spawn(module_sup, start_link, []). 到主管启动时的类似行为并立即被杀死.当您手动启动主管时,调用进程就是shell.当shell退出时,它会杀死主管.
通常,顶级主管应由应用程序启动.