Budujesz aplikację node.js za pomocą Express v4.x, a następnie uruchamiasz ją przez npm start . Moje pytanie brzmi: jak zatrzymać aplikację? Czy jest przystanek npm ?
EDYTUJ, aby uwzględnić błąd podczas implementowania zatrzymania npm
/home/nodetest2# npm stop
> nodetest2@0.0.1 stop /home/nodetest2
> pkill -s SIGINT nodetest2
pkill: invalid argument for option 's' -- SIGINT
npm ERR! nodetest2@0.0.1 stop: `pkill -s SIGINT nodetest2`
npm ERR! Exit status 2
--signal
. Użyj,man pkill
aby przeczytać o pkill.Wszystkie inne rozwiązania są zależne od systemu operacyjnego. Niezależne rozwiązanie dla dowolnego systemu operacyjnego używa socket.io w następujący sposób.
package.json
ma dwa skrypty:server.js - tutaj znajdują się Twoje zwykłe pliki ekspresowe
server.stop.js
Wypróbuj to
npm start
(aby uruchomić serwer jak zwykle)npm stop
(spowoduje to teraz zatrzymanie działającego serwera)Powyższy kod nie został przetestowany (jest to okrojona wersja mojego kodu, mój kod działa), ale mam nadzieję, że działa tak, jak jest. Tak czy inaczej, zapewnia ogólny kierunek, jeśli chcesz użyć socket.io do zatrzymania serwera.
źródło
Kiedy wypróbowałem sugerowane rozwiązanie, zauważyłem, że nazwa mojej aplikacji została obcięta. Przeczytałem
process.title
w dokumentacji nodejs ( https://nodejs.org/docs/latest/api/process.html#process_process_title ) i jest tam napisaneMoja aplikacja nie używa żadnych argumentów, więc mogę dodać ten wiersz kodu do pliku
app.js
a następnie dodaj te kilka wierszy do mojego
package.json
plikuużywać naprawdę długich nazw procesów.
npm start
inpm stop
praca, oczywiścienpm stop
, zawsze kończą wszystkie uruchomione procesy, ale to jest w porządku dla mnie.źródło
To jest problem z wersją miętową. Alternatywnie użyj cmd. Aby zabić proces serwera, po prostu uruchom to polecenie:
źródło
W systemie MAC OS X (/ BSD): możesz spróbować użyć polecenia lsof (lista otwartych plików)
a więc
źródło
Sprawdź wszystkie procesy za pomocą polecenia netstat -nptl
I po prostu zabija proces przez odniesienie PID ... W moim przypadku chcę zatrzymać 6231 / nodejs, więc wykonuję następujące polecenie:
źródło
Oto inne rozwiązanie, które łączy pomysły z poprzednich odpowiedzi. Przyjmuje podejście „procesu zabijania”, rozwiązując jednocześnie obawy dotyczące niezależności platformy.
Opiera się na drzewo-kill pakietu do obsługi zabijając drzewo procesów serwera. Zauważyłem, że zabijanie całego drzewa procesów jest konieczne w moich projektach, ponieważ niektóre narzędzia (np.
babel-node
) Uruchamiają procesy potomne. Jeśli chcesz zabić tylko jeden proces, możesz zastąpić zabijanie drzewaprocess.kill()
metodą wbudowaną .Rozwiązanie jest następujące (pierwsze dwa argumenty
spawn()
należy zmodyfikować, aby odzwierciedlić konkretną receptę na uruchomienie serwera):build / start-server.js
build / stop-server.js
package.json
Zauważ, że to rozwiązanie odłącza skrypt startowy od serwera (tzn.
npm start
Zwróci natychmiast i nie zablokuje się, dopóki serwer nie zostanie zatrzymany). Jeśli wolisz tradycyjne zachowanie blokujące, po prostu usuńoptions.detached
argument dospawn()
i wywołanie dochild.unref()
.źródło
Jeśli już próbowałeś
ctrl + c
i nadal nie działa, możesz spróbować tego. To zadziałało dla mnie.Uruchom wiersz poleceń jako administrator. Następnie uruchom poniższe polecenie, aby znaleźć identyfikator procesu (PID), który chcesz zabić. Wpisz swój numer portu
<yourPortNumber>
netstat -ano | findstr :<yourPortNumber>
Następnie wykonujesz to polecenie po zidentyfikowaniu PID.
taskkill /PID <typeYourPIDhere> /F
Uznanie za @mit $ ingh z http://www.callstack.in/tech/blog/windows-kill-process-by-port-number-157
źródło
Jeśli jest to bardzo proste, po prostu zakończ proces.
źródło
W przypadku komputera z systemem Windows (jestem w systemie Windows 10), jeśli CTRL + C (Anuluj / Przerwij) Polecenie na cli nie działa, a ekran wygląda następująco:
Spróbuj najpierw nacisnąć ENTER (lub dowolny klawisz by to zrobił), a następnie CTRL + C, a bieżący proces zapyta, czy chcesz zakończyć zadanie wsadowe:
Być może CTRL + C kończy tylko proces nadrzędny, podczas gdy npm start działa z innymi procesami podrzędnymi. Całkiem nie jestem pewien, dlaczego musisz wcisnąć ten dodatkowy klawisz przed CTRL + C, ale działa to lepiej niż konieczność zamykania wiersza poleceń i rozpoczynania od nowa.
Powiązany problem, który możesz chcieć sprawdzić: https://github.com/mysticatea/npm-run-all/issues/74
źródło
W środowiskach produkcyjnych powinieneś używać Forever.js
Jest tak używany do uruchamiania i zatrzymywania procesu węzła, możesz też wyświetlić listę uruchomionych aplikacji.
https://github.com/foreverjs/forever
źródło
Możesz użyć pm2
https://pm2.keymetrics.io/docs/usage/quick-start/
po instalacji wystarczy wpisać terminal
pm2 start app.js
i wtedypm2 stop 0
zatrzymać serwerźródło
W przypadku, gdy twój plik json nie zawiera skryptu do zatrzymania aplikacji, opcją, której używam, jest po prostu naciśnięcie ctrl + C na cmd.
źródło
Wszystkie (3) rozwiązania to:
1- ctlr + C
2 - w pliku json utworzy skrypt, który się zatrzyma
"skrypty": {"stop": "killall -SIGINT this-name-can-be-as-long-as-it-need-to-be"},
* niż w poleceniu napisz // npm stop //
3- Uruchom ponownie komputer
źródło
Musisz nacisnąć kombinację ctrl + z Mój system operacyjny to Ubuntu
źródło