【问题标题】:error:spawn a process with only argument which is a recursive function that calls io:format错误:生成一个只有参数的进程,该参数是一个调用 io:format 的递归函数
【发布时间】:2013-06-15 22:54:56
【问题描述】:

我使用 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}]}]}

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

【问题讨论】:

    标签: erlang


    【解决方案1】:

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

    这使得发出 io:format() 的进程退出(引发异常)。确实,错误报告准确地提到了这个功能。

    我的建议是审查生成一个永不结束的函数的需求。

    【讨论】:

    【解决方案2】:

    fun() 的编写方式是无限递归的。基本上是:

    fun() ->
      fun(). 
    

    这将永远不会返回(继续运行)并且可能是被 EUNIT 终止的原因。

    【讨论】:

      猜你喜欢
      • 2015-01-04
      • 2017-08-23
      • 1970-01-01
      • 2010-10-04
      • 2019-10-19
      • 2015-01-31
      • 2021-11-29
      • 2012-08-07
      • 1970-01-01
      相关资源
      最近更新 更多