【发布时间】:2018-02-02 00:14:53
【问题描述】:
Process.exit(self, :normal) 完成了这项工作,但它会打印出** (EXIT from #PID<0.49.0>) normal。有没有办法在没有消息的情况下退出?
【问题讨论】:
-
我尽我所能回答了你的问题,但它真的很模糊。您能否解释一下您的流程正在运行什么以及您在哪里看到打印的消息?
标签: elixir
Process.exit(self, :normal) 完成了这项工作,但它会打印出** (EXIT from #PID<0.49.0>) normal。有没有办法在没有消息的情况下退出?
【问题讨论】:
标签: elixir
这取决于您正在运行的应用程序。如果您正在构建一个脚本,您可以调用System.halt(0)。如果您有应用程序,请不要致电System.halt(0),因为它会关闭整个系统而不考虑所有其他应用程序。而是使用System.stop(0)。
或者,您可以调用exit(:shutdown) 退出当前进程。 :shutdown 是在 OTP 中退出的常见原因,如果您在 .exs 文件中,它也可以正常工作。
【讨论】:
是的。但是解决方案取决于您的进程正在运行的代码(以及您在哪里看到打印的消息)。
如果进程没有使用 OTP 行为并且只是一个递归函数,您可以简单地从该函数返回。您的递归函数只需要有一个函数不会再次调用自身的情况。像这样的:
def recursive_function(:exit) do
:ok
def recursive_function(other_clause) do
...
如果您正在使用像 gen_server 这样的 OTP 行为,您需要做的就是停止运行它的应用程序。这将将消息打印到 IEx 控制台(我假设这是您看到该消息的位置),但它不会将任何内容打印到 STDOUT,我假设这是您所关心的。
【讨论】:
mix escript.build; ./speedometer -h 时看到了这个。