2015-03-11 18 views
13

Process.exit(self, :normal) wykonuje zadanie, ale drukuje ** (EXIT from #PID<0.49.0>) normal. Czy istnieje sposób wyjścia bez wiadomości?Jak mogę cicho wyjść z Elixir?

+0

Odpowiedziałem na twoje pytanie najlepiej, jak potrafiłem, ale jest to naprawdę mało precyzyjne. Czy możesz wyjaśnić, jaki proces jest uruchomiony, a także gdzie drukowana jest wiadomość? – Stratus3D

Odpowiedz

20

To zależy od używanej aplikacji. Jeśli budujesz skrypt, możesz wywołać System.halt(0). Jeśli masz aplikację, nie dzwoń pod numer System.halt(0), ponieważ spowoduje to zamknięcie całego systemu bez uwzględnienia wszystkich innych aplikacji. Zamiast tego użyj System.stop(0).

Alternatywnie można zadzwonić pod numer exit(:shutdown), aby zakończyć bieżący proces. :shutdown jest częstym powodem wyjścia w OTP i jeśli jesteś wewnątrz plików .exs, będzie działać również dobrze.

3

Tak. Ale rozwiązanie zależy od kodu uruchomionego procesu (i od miejsca, w którym widzisz komunikat drukowany).

Jeśli proces nie wykorzystuje zachowania OTP i jest po prostu funkcją rekurencyjną, po prostu powrócisz z funkcji. Funkcja rekurencyjna musi mieć przypadek, w którym funkcja nie wywołuje się ponownie. Coś takiego:

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

Jeśli urządzenie używasz zachowania OTP jak gen_server, wszystko co musisz zrobić, to zatrzymać ten wniosek, że działa pod. Ten będzie wydrukować wiadomości do konsoli IEx (który zakładam jest tam, gdzie widzisz tę wiadomość), ale nie wydrukuje niczego do STDOUT, który zakładam, co cię martwi.

+0

To jest aplikacja OTP. Kod znajduje się tutaj: https://github.com/ijt/speedometer commit 4cc3112e. Widzę to po uruchomieniu 'mix escript.build; ./speedometer -h'. – ijt

+0

Po prostu skomentowałem to zatwierdzenie. Powiedziałem oświadczenie dotyczące sprawy, ale prawdopodobnie można również użyć instrukcji if. Ponieważ istnieją tylko dwie możliwe akcje (nic nie rób AKA exit, lub kontynuuj wykonywanie main). Mam nadzieję, że pomaga! – Stratus3D

+0

Dobrze, dobry pomysł. – ijt