wake-up-neo.com

Knoten JS Strg + C stoppt den Server nicht (nachdem der Server mit "npm start" gestartet wurde)

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!

19
Mat

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. 

10
Mat

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.

4
YahiaRefaiea

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.

  1. Öffnen Sie Task Manager
  2. Gehen Sie auf die Registerkarte Processes
  3. Suchen Sie nach node.exe und drücken Sie dann Prozess beenden

Dies hat mir erlaubt, den Server schnell zu stoppen.

2
Gene Parcellano

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.

1
Pankaj Shinde

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 angepasst msys2-runtime installieren müssen, um eine vollständig funktionierende git in MSYS2 zu haben.

Hier die Schritte, die zu unternehmen sind:

  1. Öffnen Sie ein MSYS2-Terminal.
  2. Bearbeiten Sie /etc/pacman.conf und fügen Sie kurz vor [mingw32] (Zeile # 71 auf meinem Computer) das Repository für git-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
    
  3. 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
    
  4. Dann synchronisieren Sie das neue Repository

    pacboy update
    
  5. 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.

  6. Dann synchronize again (Aktualisierung des Nicht-Kerns der Pakete):

    pacboy update
    
  7. 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
    
  8. Überprüfen Sie abschließend, ob alles in Ordnung ist, indem Sie git --version in einer MINGW64-Shell ausführen, und es sollte etwas wie git 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

1
Birchlabs

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

0
lunchtime

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.

0

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.

0
M.Quan

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.

0
Janac Meena