我如何从Elixir安静地离开?

时间:2015-03-11 18:16:25

标签: elixir

Process.exit(self, :normal)完成工作,但会打印出** (EXIT from #PID<0.49.0>) normal。有没有办法在没有消息的情况下退出?

2 个答案:

答案 0 :(得分:26)

这取决于您正在运行的应用程序。如果要构建脚本,则可以调用System.halt(0)。如果您有应用程序,请不要调用System.halt(0),因为它将关闭整个系统而不考虑所有其他应用程序。而是使用System.stop(0)

或者,您可以致电exit(:shutdown)退出当前流程。 :shutdown是退出OTP的常见原因,如果您在.exs个文件中,它也可以正常工作。

答案 1 :(得分:3)

是。但解决方案取决于您的进程运行的代码(以及您在哪里看到打印的消息)。

如果进程没有使用OTP行为并且只是一个递归函数,则只需从函数返回即可。你的递归函数只需要有一个函数不会再次调用自身的情况。像这样:

def recursive_function(:exit) do
  :ok
def recursive_function(other_clause) do
  ...

如果您正在使用像gen_server这样的OTP行为,那么您需要做的就是停止运行它的应用程序。这个将消息打印到IEx控制台(我假设是您看到该消息的位置),但它不会向STDOUT打印任何内容,我认为这是您所关心的。