优雅地终止Erlang服务器或fsm?

时间:2009-02-01 21:06:15

标签: erlang

我有一个具有gen_fsm行为的模块。现在我通过在适当的状态/消息中返回标准{stop,Reason,State}来终止它。

它似乎正确终止,但在运行时被视为错误。

这是正常的吗?有没有办法在不将其视为错误的情况下停止fsm进程?

1 个答案:

答案 0 :(得分:6)

返回值为{stop,Reason,StateData}而不是{stop,StateName,StateData}。

如果Reason不是正常或关闭,则会生成错误报告。对于正常退出服务器使用正常,当服务器被其主管要求退出时,将使用shutdown。

(现在编辑已添加错误详情。)

gen_fsm正在调用client_fsm:terminate(normal, loggedin, {state,#Port<0.144>,12345,"Bob"})

导致function_clause异常(函数存在但没有子句可以与这些参数匹配)。如果您更改client_fsm:terminate/3以使该调用成功,则错误应该消失。