2015-03-11 3 views
13

Process.exit(self, :normal) erledigt den Job, aber es druckt ** (EXIT from #PID<0.49.0>) normal aus. Gibt es eine Möglichkeit, ohne die Nachricht zu beenden?Wie kann ich leise von Elixir ausgehen?

+0

Ich beantwortete Ihre Frage so gut ich konnte, aber es ist sehr vage. Können Sie erklären, wo Ihr Prozess läuft und wo Sie die Nachricht gedruckt sehen? – Stratus3D

Antwort

20

Es hängt davon ab, welche Anwendung Sie ausführen. Wenn Sie ein Skript erstellen, können Sie System.halt(0) aufrufen. Wenn Sie eine Anwendung haben, rufen Sie nicht System.halt(0), da es das gesamte System ohne Berücksichtigung aller anderen Anwendungen herunterfahren wird. Verwenden Sie stattdessen System.stop(0).

Alternativ können Sie exit(:shutdown) aufrufen, um den aktuellen Prozess zu beenden. :shutdown ist ein häufiger Grund für den Ausgang in OTP und wenn Sie in .exs Dateien sind, wird es auch gut funktionieren.

3

Ja. Die Lösung hängt jedoch von dem Code ab, den Ihr Prozess ausführt (und wo die Nachricht gedruckt wird).

Wenn der Prozess kein OTP-Verhalten verwendet und einfach eine rekursive Funktion ist, können Sie einfach von der Funktion zurückkehren. Ihre rekursive Funktion muss nur einen Fall enthalten, in dem die Funktion nicht erneut aufgerufen wird. Etwas wie folgt aus:

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

Wenn Ihr ein OTP Verhalten wie gen_server verwenden, alles, was Sie tun müssen, ist, dass die Anwendung zu stoppen, die es unter ausgeführt wird. Diese wird drucken Nachrichten an die IEX-Konsole (die ich vermute, ist, wo Sie diese Nachricht sehen), aber es wird nichts auf STDOUT, die ich vermute, ist, was Sie besorgt sind.

+0

Dies ist eine OTP-App. Der Code ist hier: https://github.com/ijt/speedometer Commit 4cc3112e. Ich sehe das, wenn ich 'mix escript.build; ./Geschwindigkeitsmesser -h'. – ijt

+0

Nur kommentiert, dass commit. Ich habe eine Case-Anweisung gesagt, aber Sie könnten wahrscheinlich auch eine if-Anweisung verwenden. Da es nur zwei mögliche Aktionen gibt (nichts AKA beenden, oder main weiter ausführen). Ich hoffe, das hilft! – Stratus3D

+0

Richtig, gute Idee. – ijt

Verwandte Themen