web-dev-qa-db-ja.com

どうすればElixirから静かに出ることができますか?

Process.exit(self, :normal)はジョブを実行しますが、** (EXIT from #PID<0.49.0>) normalを出力します。メッセージなしで終了する方法はありますか?

23
ijt

実行しているアプリケーションによって異なります。スクリプトを作成している場合は、System.halt(0)を呼び出すことができます。アプリケーションがある場合は、System.halt(0)を呼び出さないでください。他のすべてのアプリケーションを考慮せずに、システム全体がシャットダウンされます。代わりにSystem.stop(0)を使用してください。

または、exit(:shutdown)を呼び出して現在のプロセスを終了することもできます。 :shutdownはOTPで終了する一般的な理由であり、.exsファイル内にいる場合は、問題なく機能します。

30
José Valim

はい。ただし、解決策は、プロセスが実行しているコード(およびメッセージが出力される場所)によって異なります。

プロセスがOTP動作を使用しておらず、単に再帰関数である場合は、関数から簡単に戻ることができます。再帰関数は、関数がそれ自体を再度呼び出さない場合が必要です。このようなもの:

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

Gen_serverのようなOTP動作を使用している場合は、実行中のアプリケーションを停止するだけです。これはwillメッセージをIExコンソールに出力します(メッセージが表示される場所であると思います)が、STDOUTには何も出力されません。これはあなたが懸念していることだと思います。

3
Stratus3D