我是一个Erlang初学者,正在学习OTP。当我试图在运行时与一个管理员对话时,我收到了一个noproc
错误。事实上,那个管理员的start_link
(由我实现,而不是由supervisor:start_link()实现)似乎没有被执行,因为它第一行中的io:fwrite
甚至没有被输出。
结果发现问题是Supervisor的一个子进程缺少一些gen_server
回调函数(应用程序没有使用这些函数)。编译器记录了一个警告,就这样,当我启动应用程序时没有错误。我不确定发生了什么,但是应该有一些错误指示发生吗?
如果它很重要,Supervisor本身的子规范看起来就是这样的:
ElementSup = {sc_element_sup,
{sc_element_sup, start_link, []},
permanent, 2000, supervisor, [sc_element]},
1条答案
按热度按时间ldxq2e6h1#
首先,我得到一个编译器错误:
然后,主管告诉我它没有启动,因为它无法启动它的所有子进程:
实际上,该管理程序的start_link似乎没有被执行,因为它的第一行中的io:fwrite甚至没有输出。
Supervisor的
start_link()
函数是在OTP库中定义的,因此该函数中不能有io:fwrite()
。您可以在定义的函数中添加io:fwrite()
行,该函数将依次调用supervisor:start_link()
,例如:"hello"消息在我的erlang shell输出中显示得很好。