Sie erstellen die node.js-App mit Express v4.x und starten Ihre App dann mit npm start . Meine Frage ist, wie man die App stoppt. Gibt es npm stop ?
BEARBEITEN , um den Fehler beim Implementieren von npm stop einzuschließen
/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
. Verwenden Sieman pkill
, um über pkill zu lesen.Alle anderen Lösungen hier sind vom Betriebssystem abhängig. Eine unabhängige Lösung für jedes Betriebssystem verwendet socket.io wie folgt.
package.json
hat zwei Skripte:server.js - Hier lebt dein übliches Express-Zeug
server.stop.js
Probieren Sie es aus
npm start
(um deinen Server wie gewohnt zu starten)npm stop
(Dies stoppt jetzt Ihren laufenden Server.)Der obige Code wurde nicht getestet (es ist eine abgespeckte Version meines Codes, mein Code funktioniert), aber hoffentlich funktioniert er so wie er ist. In beiden Fällen gibt es die allgemeine Richtung vor, die Sie einschlagen müssen, wenn Sie Ihren Server mit socket.io stoppen möchten.
quelle
Als ich die vorgeschlagene Lösung ausprobierte, stellte ich fest, dass mein App-Name abgeschnitten war. Ich habe
process.title
in der NodeJS-Dokumentation ( https://nodejs.org/docs/latest/api/process.html#process_process_title ) nachgelesen und es heißtMeine App verwendet keine Argumente, daher kann ich diese Codezeile zu meiner hinzufügen
app.js
und fügen Sie dann diese paar Zeilen zu meiner
package.json
Datei hinzuwirklich lange Prozessnamen verwenden.
npm start
undnpm stop
Arbeit wird natürlichnpm stop
immer alle laufenden Prozesse beenden, aber das ist für mich in Ordnung.quelle
Dies ist ein Mintty-Versionsproblem. Alternativ können Sie auch cmd verwenden. Um den Serverprozess zu beenden, führen Sie einfach diesen Befehl aus:
quelle
Unter MAC OS X (/ BSD): Sie können versuchen, den Befehl lsof (Liste offener Dateien) zu verwenden
und so
quelle
Überprüfen Sie mit netstat -nptl alle Prozesse
Und es beendet einfach den Prozess durch die PID-Referenz .... In meinem Fall möchte ich die 6231 / nodejs stoppen, damit ich den folgenden Befehl ausführe:
quelle
Hier ist eine weitere Lösung, die Ideen aus den vorherigen Antworten mischt. Es wird der "Kill-Prozess" -Ansatz verfolgt, während die Bedenken hinsichtlich der Plattformunabhängigkeit ausgeräumt werden.
Es basiert auf dem Tree-Kill- Paket, um das Beenden des Server-Prozessbaums zu handhaben. Ich fand es in meinen Projekten notwendig, den gesamten Prozessbaum zu beenden, da einige Tools (z. B.
babel-node
) untergeordnete Prozesse erzeugen. Wenn Sie nur einen einzelnen Prozess beenden müssen, können Sie Tree-Kill durch die integrierteprocess.kill()
Methode ersetzen .Die Lösung lautet wie folgt (die ersten beiden Argumente
spawn()
sollten geändert werden, um das spezifische Rezept für die Ausführung Ihres Servers widerzuspiegeln):build / start-server.js
build / stop-server.js
package.json
Beachten Sie, dass diese Lösung das Startskript vom Server trennt (dh
npm start
sofort zurückkehrt und nicht blockiert, bis der Server gestoppt wird). Wenn Sie das traditionelle Blockierungsverhalten bevorzugen, entfernen Sie einfach dasoptions.detached
Argumentspawn()
und den Aufruf vonchild.unref()
.quelle
Wenn Sie es bereits versucht haben
ctrl + c
und es immer noch nicht funktioniert, möchten Sie dies möglicherweise versuchen. Das hat bei mir funktioniert.Führen Sie die Befehlszeile als Administrator aus. Führen Sie dann den folgenden Befehl aus, um die Prozess-ID (PID) zu finden, die Sie beenden möchten. Geben Sie Ihre Portnummer ein
<yourPortNumber>
netstat -ano | findstr :<yourPortNumber>
Anschließend führen Sie diesen Befehl aus, nachdem Sie die PID identifiziert haben.
taskkill /PID <typeYourPIDhere> /F
Ein großes Lob an @mit $ ingh von http://www.callstack.in/tech/blog/windows-kill-process-by-port-number-157
quelle
Wenn es sehr einfach ist, beenden Sie einfach den Prozess.
quelle
Für Windows-Computer (ich bin unter Windows 10), wenn STRG + C (Abbrechen / Abbrechen) Befehl auf CLI nicht funktioniert und der Bildschirm wie folgt angezeigt wird:
Versuchen Sie zuerst die EINGABETASTE zu drücken (oder eine beliebige Taste würde dies tun) und dann STRG + C, und der aktuelle Prozess fragt Sie, ob Sie den Stapeljob beenden möchten:
Möglicherweise beendet STRG + C den übergeordneten Prozess nur, während npm start mit anderen untergeordneten Prozessen ausgeführt wird. Sie sind sich nicht sicher, warum Sie diese zusätzliche Taste vor STRG + C drücken müssen, aber es funktioniert besser, als die Befehlszeile zu schließen und erneut zu starten.
Ein verwandtes Problem, das Sie möglicherweise überprüfen möchten: https://github.com/mysticatea/npm-run-all/issues/74
quelle
Für Produktionsumgebungen sollten Sie Forever.js verwenden
Es ist so nützlich für den Start- und Stopp-Knotenprozess, dass Sie auch Apps auflisten können, die ausgeführt werden.
https://github.com/foreverjs/forever
quelle
Sie können pm2 verwenden
https://pm2.keymetrics.io/docs/usage/quick-start/
Nach der Installation geben Sie einfach das Terminal ein
pm2 start app.js
und dannpm2 stop 0
um Ihren Server zu stoppenquelle
Falls Ihre JSON-Datei kein Skript zum Stoppen der App enthält, kann ich nur Strg + C auf dem Cmd drücken.
quelle
Alle (3) Lösungen sind:
1- ctlr + C.
2- In der JSON-Datei wird ein Skript geschrieben, das stoppt
"scripts": {"stop": "killall -SIGINT dieser Name kann so lange sein, wie er sein muss"},
* als im Befehl schreiben // npm stop //
3- Starten Sie den PC neu
quelle
Sie müssen die Kombination Strg + Z drücken. Mein Betriebssystem ist Ubuntu
quelle