Process.exit(self, :normal)
完成工作,但会打印出** (EXIT from #PID<0.49.0>) normal
。有没有办法在没有消息的情况下退出?
答案 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打印任何内容,我认为这是您所关心的。