Как я могу спокойно выйти из Эликсира?

Process.exit(self, :normal) выполняет задание, но оно печатает ** (EXIT from #PID<0.49.0>) normal. Есть ли способ выйти без сообщения?

Ответы

Ответ 1

Это зависит от того, какое приложение вы используете. Если вы создаете скрипт, вы можете вызвать System.halt(0). Если у вас есть приложение, не вызывайте System.halt(0), так как он System.halt(0) всю систему без учета всех других приложений. Вместо этого используйте System.stop(0).

Кроме того, вы можете вызвать exit(:shutdown) чтобы выйти из текущего процесса. :shutdown - общая причина выхода в OTP, и если вы находитесь внутри файлов .exs, это тоже будет очень хорошо.

Ответ 2

Да. Но решение зависит от кода, в котором работает ваш процесс (и где вы видите сообщение, напечатанное).

Если процесс не использует поведение OTP и является просто рекурсивной функцией, вы можете просто вернуться из функции. В вашей рекурсивной функции просто должен быть случай, когда функция снова не вызывает себя. Что-то вроде этого:

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

Если вы используете поведение OTP, такое как gen_server, все, что вам нужно сделать, это остановить приложение, в котором оно работает. Это будет печатать сообщения на консоли IEx (я предполагаю, что вы видите это сообщение), но он ничего не печатает в STDOUT, что я предполагаю в том, что вас беспокоит.