Wywołaj metodę process
obiektu globalnego exit
:
process.exit()
Z dokumentów:
process.exit ([kod])
Kończy proces z określonym code
. Jeśli zostanie pominięty, exit używa kodu „sukces” 0
.
Aby wyjść z kodem „błąd”:
process.exit(1);
Powłoka, która wykonała węzeł, powinna widzieć kod wyjścia jako 1
.
end()
to poprosić. W przeciwnym razie po prostu się zawiesi.exit
wcale nie wprowadza w błąd. Jesteś zdezorientowany, jak działa Węzeł. Pomyśl o Node jak o samym serwerze. Nie jest uruchamiany tylko w razie potrzeby, podobnie jak PHP znajduje się na serwerze WWW takim jak Apache. Węzeł wcale nie musi mieć nic wspólnego z serwerami WWW! To tylko host dla JavaScript, z kilkoma fajnymi wbudowanymi bibliotekami do robienia użytecznych rzeczy.mod_php
ani używać Apache. Możesz zaimplementować httpd w PHP tak, jak robi to node, jeśli naprawdę chcesz lub zastosować bardziej rozsądne / standardowe podejście, takie jak FastCGI, tak jak możesz to zrobić w węźle.process.exit()
jest to zalecane , jak opisano w poniższej odpowiedzi .Tylko uwaga, że używanie nie
process.exit([number])
jest zalecaną praktyką.źródło
process.exit()
jest przeznaczony.Z oficjalnej dokumentacji nodejs.org :
Kończy proces z określonym kodem. Jeśli zostanie pominięty, exit używa kodu „sukces” 0.
Aby wyjść z kodem „błąd”:
źródło
code = 0; process.exit(code);
code
?process.exit()
brak parametru, ponieważ kod ma domyślną wartość 0process.exit(0);
i uruchomisz gonode exit_0.js && echo 'success'
, powie „sukces”. Jeśli utworzysz plik exit_1.js za pomocąprocess.exit(1);
i uruchomisznode exit_1.js && echo 'success'
go, nie powie on „sukces”, ponieważ proces zakończył się z niezerową wartością (co oznacza „niepowodzenie” lub „nieprawidłowe wyjście” do powłoki). Ponadto zobaczysz różne wartości,$?
jeśli uruchomisznode exit_1.js
vsnode exit_0.js
(możesz to sprawdzić, wykonując,node exit_1.js
a następnie wykonującecho $?
).Jeśli korzystasz z terminala Unix lub wiersza poleceń systemu Windows i chcesz wyjść z NPL REPL, albo ...
.exit
i naciśnij Enter lubźródło
node
REPL, Ctrl + D, aby wyjść, jest standardowym zachowaniem, więc działa również w systemie Windows.Z wiersza poleceń
.exit
jest to, czego chcesz:Jest to udokumentowane w dokumentach REPL . REPL (Read-Eval-Print-Loop) to tak zwana linia poleceń Node.
Z normalnego programu użyj
process.exit([code])
.źródło
Zależy to od powodu, dla którego chcesz wyjść z procesu node.js, ale w każdym razie
process.exit()
jest to ostatnia rozważana opcja . Cytat z dokumentacji:Omówmy możliwe powody, dla których możesz chcieć wyjść z procesu node.js i dlaczego powinieneś unikać
process.exit()
:Przypadek 1 - Wykonanie zakończone (skrypt wiersza poleceń)
Jeśli skrypt osiągnął koniec, a interpreter węzła nie kończy działania, oznacza to, że niektóre operacje asynchroniczne są nadal w toku. W
process.exit()
tym momencie niewłaściwe jest wymuszanie zakończenia procesu . Lepiej spróbuj zrozumieć, co powstrzymuje skrypt przed wyjściem w oczekiwany sposób . Po rozwiązaniu tego problemu możesz użyćprocess.exitCode
dowolnego wyniku do wywołania procesu wywoływania.Przypadek 2 - Zakończenie z powodu sygnału zewnętrznego (SIGINT / SIGTERM / other)
Na przykład, jeśli chcesz z wdziękiem zamknąć aplikację ekspresową . W przeciwieństwie do skryptu wiersza poleceń, aplikacja ekspresowa działa bez końca, czekając na nowe żądania.
process.exit()
będzie złą opcją tutaj, ponieważ spowoduje to przerwanie wszystkich oczekujących wniosków. Niektóre z nich mogą nie być idempotentne (UPDATE, DELETE). Klient nigdy nie będzie wiedział, czy żądania te zostały zakończone, czy nie po stronie serwera i może to być przyczyną niespójności danych między klientem a serwerem. Jedynym dobrym rozwiązaniem jest powiadomienie serwera HTTP, aby przestał akceptować nowe żądania i czekał na zakończenie oczekującychserver.close()
:Jeśli nadal nie wychodzi - patrz przypadek 1.
Przypadek 3 - Błąd wewnętrzny
Zawsze lepiej
throw
jest popełnić błąd, otrzymasz ładnie sformatowany ślad stosu i komunikat o błędzie. Górne poziomy kodu zawsze mogą decydować, czy poradzą sobie z błędem (catch
), czy też mogą zawiesić proces. Z drugiej strony,process.exit(1)
proces zostanie cicho zakończony i nie będzie szans na odzyskanie po tym. Może to być jedyna „korzyść”process.exit()
, możesz mieć pewność, że proces zostanie zakończony.źródło
Process.exit()
wygląda na dużą nadwyżkę w przypadku większości aplikacji. Szukałem odpowiednika funkcji die () php ... więcej takich jak:throw new Error('die msg')
REPL (wiersz poleceń)
Naciśnij
ctrl + c
dwa razyWpisz
.exit
i naciśnij enterPlik skryptu
Węzeł zwykle kończy działanie z kodem 0, gdy nie ma już żadnych operacji asynchronicznych.
process.exit(1)
powinien zostać użyty do wyjścia z kodem błędu. Pozwoli nam to wnioskować, że węzeł nie zamknął się płynnie i został zmuszony do zamknięcia.Istnieją inne kody wyjścia, takie jak
3 - Wewnętrzny błąd analizy JavaScript (bardzo bardzo rzadko)
5 - Błąd krytyczny w silniku javascript v8
9 - Niepoprawny argument
Pełna lista znajduje się w kodach wyjścia węzłów
źródło
Mam aplikację, którą chciałem:
Musiałem podpiąć się
process.exit(code)
doexit
modułu obsługi zdarzeń, w przeciwnym razie poczta nie zostanie wysłana, ponieważprocess.exit(code)
bezpośrednie wywołanie zabija zdarzenia asynchroniczne.źródło
process.exitCode
do pracy w narzędziu wiersza polecenia, które buduję (testowane na Node v4.3.0). Ale nie mogłem sprawić, żeby zachowało się jak udokumentowane. To bardzo dobrze mogło być przypadkowecommander
- chociaż github.com/tj/commander.js/… mnie zastanawia. Nie jestem pewien, czy ktoś jeszcze nie widział tego problemu z Węzłem 4, ale dokumentowanie na wszelki wypadek do wykorzystania w przyszłości.process.exitCode = 1
, proces kończy się kodem 0.Jak wskazał @Dominic, zgłoszenie nieprzechwyconego błędu jest lepszą praktyką niż wywoływanie process.exit ([kod]) :
process.exitCode = 1; throw new Error("my module xx condition failed");
źródło
Do wyjścia
Przydatne kody wyjścia
źródło
Z kodu możesz użyć
process.exit([errorcode])
gdzie[errorcode]
jest opcjonalną liczbą całkowitą (0
domyślnie wskazuje sukces).Jeśli korzystasz z Read Eval Print Loop (REPL) , możesz użyć Ctrl+ Dlub wpisać
.exit
Alternatywnie, w systemie Windows lub Linux możesz użyć Ctrl+ C, Ctrl+C
Na Macu polecenie to Ctrl+ Z, Ctrl+Z
źródło
node --version
v0.10.18
Naciśnij
Ctrl + C
dwukrotnie lub.exit
.źródło
Udało mi się zmusić wszystkie procesy węzłów do śmierci bezpośrednio z powłoki Git Bash w systemie Windows 10, wpisując
taskkill -F -IM node.exe
- to kończy wszystkie procesy węzła na moim komputerze naraz. Odkryłem, że mogę również użyćtaskkill //F //IM node.exe
. Nie wiem, dlaczego zarówno-
i//
praca w tym kontekście. Mam nadzieję że to pomoże!źródło
Ponieważ proces jest obiektem globalnym, nie musisz importować żadnego modułu. Poniższa funkcja kończy lub zabija bieżący proces węzła.
źródło
Otwórz terminal wiersza poleceń, w którym działa aplikacja węzła, i naciśnij Ctrl + C
jeśli chcesz zamknąć aplikację węzła js z kodu,
źródło
jeśli chcesz wyjść z aplikacji węzła js, to napisz
w twoim kodzie
źródło
Wyjście w węźle js odbywa się na dwa sposoby:
Jak to działa?
Jeśli chcesz zmusić pętlę wykonawczą do zatrzymania procesu, możesz użyć procesu zmiennej globalnej , który jest instancją EventEmitter . Kiedy więc wywołujesz process.exit () , faktycznie emitujesz zdarzenie wyjściowe , które natychmiast kończy wszystkie zadania, nawet jeśli nadal nie zostały wykonane operacje asynchroniczne.
process.exit () przyjmuje jako parametr kod zakończenia (Integer). Kod 0 jest domyślny, co oznacza, że kończy się „sukcesem”. Podczas gdy kod 1 oznacza, że kończy się z „niepowodzeniem”.
źródło
Jeśli jesteś w systemie Windows, przejdź do Menedżera zadań, a następnie przejdź do Procesy, poszukaj procesu o nazwie „węzeł”, następnie kliknij go prawym przyciskiem myszy, a następnie kliknij opcję „Zakończ proces”.
źródło
Możesz użyć funkcji process.exit ([kod]) .
Jeśli chcesz wyjść bez „awarii”, użyj kodu
0
:Aby wyjść z kodem „błąd”
1
, możesz uruchomić:Kod „awarii” awarii jest specyficzny dla aplikacji. Możesz więc użyć do tego własnych konwencji.
źródło