错误:仅使用参数生成一个进程,该参数是一个调用io:format的递归函数

时间:2013-06-19 12:02:36

标签: erlang

我使用EUNIT模块并包含“eunit / include / eunit.hrl”。我用参数func / 0调用spawn / 1在测试函数中生成一个新进程,并在新进程中调用io:format / 1。参数func / 0是一个递归函数,如下所示:

func() -> 
A = 2,
io:format("#######~p~n", [A]),
timer:sleep(1000),
func().

然后

10> bt:test().
All 2 tests passed.
ok
11>
=ERROR REPORT==== 19-Jun-2013::19:50:54 ===
Error in process <0.122.0> with exit value: {terminated,[{io,format,[<0.121.0>,"
#######~p~n",[2]],[]},{bt,func,0,[{file,"bt.erl"},{line,6}]}]}

出了什么问题,我该怎么办?

2 个答案:

答案 0 :(得分:2)

如果我正确理解问题是你正在产生一个运行永无止境函数func()的进程,但是当EUnit进程终止时,它可能关闭标准输出

这使得进程发出io:format()退出(引发异常)。实际上,ERROR REPORT正是提到了这个功能。

我的建议是审查产生永不结束的功能的必要性。

答案 1 :(得分:0)

写fun()的方式,它是无限的递归。基本上是这样的:

fun() ->
  fun(). 

永远不会返回(继续运行),可能是EUNIT终止的原因。