Wenn ich meinen Server mit node app.js
in der Befehlszeile (mit Git Bash) starte, kann ich ihn mit Strg + C stoppen.
In meiner package.json-Datei habe ich dieses Start-Skript erhalten, mit dem ich den Befehl npm start
verwenden kann, um den Server zu starten:
"scripts": {
"start": "node app"
},
Wenn ich dies tue, startet der Server ganz normal:
$ npm start
> [email protected] start C:\Projects\nodekb
> node app.js
Server started on port 3000...
Wenn ich jetzt Strg + C betreibe, wird der Server nicht gestoppt (der Knotenprozess bleibt im Task-Manager). Dies bedeutet, dass eine Fehlermeldung angezeigt wird, wenn ich versuche, npm start
erneut auszuführen, da Port 3000 noch verwendet wird.
Ich folge einem Tutorial auf youtube ( video mit timestamp ), und wenn dieser Kerl Strg + C und dann wieder npm start
ausführt, funktioniert es normal.
Irgendwelche Ideen, warum mein Serverprozess nicht gestoppt wird, wenn ich Strg + C verwende?
Meine app.js-Datei, falls erforderlich:
var express = require("express");
var path = require("path");
//Init app
var app = express();
//Load View Engine
app.set("views", path.join(__dirname, "views"));
app.set("view engine", "pug");
//Home Route
app.get("/", function(req, res) {
res.render("index", {
title: "Hello"
});
});
//Add route
app.get("/articles/add", function (req, res) {
res.render("add_article", {
title: "Add Article"
});
});
//Start server
app.listen(3000, function() {
console.log("Server started on port 3000...");
});
Vielen Dank!
Ich habe es auf normalem Windows-Cmd ausprobiert, und es hat so funktioniert, wie es dort sein sollte. Sieht so aus, als wäre es ein Problem mit Git bash.
Ich hatte das gleiche Problem mit npm
. Aber schließlich wusste ich, dass es ein Problem mit git selbst war.
Vor 15 Tagen gab es einen Kommentar von dscho zu GitHub. Er sagte, dass sie daran arbeiten, dieses Problem in der nächsten Version zu beheben. Er teilte auch die genaue msys-2.0.dll
-Datei, die das Problem für die Personen beheben kann, die nicht warten können.
Ich persönlich konnte es kaum erwarten: p. Also versuchte ich es, lud die Datei herunter und warf sie in den git-Ordner, wie er sagte. Und das Problem ist weg! Es war fantastisch!
Machen Sie jedoch unbedingt eine Sicherungskopie, bevor Sie die Datei ersetzen.
Ich habe auch versucht, es zu töten, nachdem ich express
ausgeführt hatte. mit taskkill /im node.exe
für die cmd
, aber es wurde kein Prozess gefunden.
Schauen Sie sich dieses Problem unter GitHub an und suchen Sie nach dem Namen der Datei msys-2.0.dll
, um schneller zum Kommentar zu gelangen.
Ich verwende git bash auf meinem Windows-Rechner und habe dieses Problem im letzten Monat oder so erlebt.
Ich weiß immer noch nicht, was es verursacht, aber ich habe einen anderen Weg gefunden, um es zu stoppen.
Dies hat mir erlaubt, den Server schnell zu stoppen.
Strg + C beendet den Server nicht. Die Lösung des Problems bestand in der Verwendung des folgenden Code-Snippets in server.js:
process.on('SIGINT', function() {
console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
// some other closing procedures go here
process.exit(1);
});
Das hat bei mir funktioniert.
Sie können auch nach anderen Lösungen suchen, die unter Graceful shutdown in NodeJS aufgeführt sind.
Dieses Problem ist in eigentliches MSYS2 aufgetreten, auch in der neuesten Version (x64 2018-05-31).
Glücklicherweise verwaltet Git für Windows eine angepasste MSYS2-Laufzeitumgebung. Sie haben Patches, die nicht an den Originalcomputer gesendet wurden, einschließlich eines Patch, der die Emulation von SIGINT, SIGTERM und SIGKILL behebt .
Diskussion: https://github.com/nodejs/node/issues/16103
Ich konnte meine "MSYS2-Plattform" so einrichten, dass sie Git für MSYS2-Laufzeit von Windows verwendet, indem ich diese Anweisungen befolge.
Hier für die Nachwelt wiederholt:
Installieren Sie es richtig in MSYS2
In diesem Handbuch wird davon ausgegangen, dass Sie die 64-Bit-Version von Git für Windows verwenden möchten.
Da Git für Windows auf MSYS2 basiert, ist es möglich, das Paket
git
in einer vorhandenen MSYS2-Installation zu installieren. Wenn Sie also bereits MSYS2 auf Ihrem Computer verwenden, können Sie Git für Windows verwenden, ohne das vollständige Installationsprogramm auszuführen oder die portable Version zu verwenden.Beachten Sie jedoch, dass es einige Einschränkungen für diesen Weg gibt. Git für Windows hat einige Patches für
msys2-runtime
erstellt, die nicht an den Upstream gesendet wurden. (Dies war geplant, aber in Ausgabe # 284 wurde bestimmt, dass dies wahrscheinlich nicht der Fall sein würde.) Dies bedeutet, dass Sie Git for Windows angepasstmsys2-runtime
installieren müssen, um eine vollständig funktionierendegit
in MSYS2 zu haben.Hier die Schritte, die zu unternehmen sind:
- Öffnen Sie ein MSYS2-Terminal.
Bearbeiten Sie
/etc/pacman.conf
und fügen Sie kurz vor[mingw32]
(Zeile # 71 auf meinem Computer) das Repository fürgit-for-windows
-Pakete hinzu:[git-for-windows] Server = https://wingit.blob.core.windows.net/x86-64
und optional auch das MINGW-only-Repository für die Gegenteil - Architektur (d. h. MINGW32 für 64-Bit-SDK):
[git-for-windows-mingw32] Server = https://wingit.blob.core.windows.net/i686
Autorisieren Sie den Signaturschlüssel (dieser Schritt muss gelegentlich wiederholt werden, bis https://github.com/msys2/msys2/issues/62 behoben ist.
curl -L https://raw.githubusercontent.com/git-for-windows/build-extra/master/git-for-windows-keyring/git-for-windows.gpg | pacman-key --add - && pacman-key --lsign-key 1A9F3986
Dann synchronisieren Sie das neue Repository
pacboy update
Dies aktualisiert
msys2-runtime
und fordert Sie daher auf, das Fenster zu schließen (nicht, beenden Sie einfach den Pacman-Prozess). Keine Panik, schließen Sie einfach alle derzeit geöffneten MSYS2-Shells und MSYS2-Programme. Sobald alle geschlossen sind, starten Sie ein neues Terminal.Dann synchronize again (Aktualisierung des Nicht-Kerns der Pakete):
pacboy update
Und schließlich installieren Sie die Git/cURL-Pakete:
pacboy sync git:x git-doc-html:x git-doc-man:x git-extra: curl:x
Überprüfen Sie abschließend, ob alles in Ordnung ist, indem Sie
git --version
in einer MINGW64-Shell ausführen, und es sollte etwas wiegit version 2.14.1.windows.1
(oder neuer) ausgegeben werden.
Hinweis: Ich habe festgestellt, dass das von Schritt 7 installierte git-extra
-Paket ziemlich aufdringlich war (es fügt eine Meldung "Willkommen beim Git for Windows SDK!" Zu jedem Terminal, das Sie öffnen, hinzu) pacman -R git-extra
.
Note 2: Ich fand auch, dass die MSYS2-Laufzeitumgebung von Git für Windows in einem anderen Basisverzeichnis als das von MSYS2 geöffnet wird. Dies bedeutet auch, dass das falsche Bash-Profil gelesen wird. Ich habe dies behoben, indem ich in der Systemsteuerung eine Umgebungsvariable zu Windows hinzugefügt habe: HOME=/C/msys64/home/myusername
Dies ist mehr als wahrscheinlich nur ein Problem, wenn Ihre Konsole den Befehl nicht genau an den Prozess sendet. Dies ist ziemlich üblich, besonders wenn Sie Konsolen von Drittanbietern wie cmdr/conemu verwenden.
Die Lösung?
Drücken Sie einfach mehrmals ctrl + c, bis es schließt: P
Manchmal hängt der Knotenprozess. Überprüfen Sie die Prozess-ID mit ps
. Sie möchten möglicherweise den Knoten grep und dann den Prozess mit kill -9 [PID]
beenden.
Verwenden Sie Strg + C und geben Sie dann ein:> pm2 stop all
Dadurch werden alle Server angehalten oder wenn Sie mit nodejs einen Stack erhalten.
Ich konnte dieses Problem debuggen, indem ich die Ports mit TCP View überprüfte und feststellte, dass mein Knotenserver aktiv war, obwohl ich Ctrl-C gedrückt hatte, um es zu stoppen. Ich schlage vor, das Terminal, von dem aus Sie Knoten ausführen, vollständig zu beenden.