web-dev-qa-db-fra.com

Le nœud JS ctrl + C n'arrête pas le serveur (après le démarrage du serveur avec "npm start")

Quand je démarre mon serveur avec node app.js dans la ligne de commande (avec Git Bash), je peux l'arrêter avec ctrl + C.

Dans mon fichier package.json, j'ai ce script de démarrage qui me permet d'utiliser la commande npm start pour démarrer le serveur:

"scripts": {
    "start": "node app"
},

Quand je fais cela, le serveur démarre normalement:

$ npm start

> [email protected] start C:\Projects\nodekb
> node app.js

Server started on port 3000...

Mais quand je ctrl + C maintenant, le serveur n'est pas arrêté (le processus de noeud reste dans le gestionnaire de tâches). Cela signifie que je reçois une erreur lorsque j'essaie de refaire npm start, car le port 3000 est toujours utilisé.

Je suis un tutoriel sur youtube ( vidéo avec timestamp ), et quand ce gars ctrl + C, puis exécute à nouveau npm start, cela fonctionne normalement.

Des idées pour lesquelles mon processus de serveur n'est pas arrêté quand j'utilise ctrl + C?

Mon fichier app.js si nécessaire:

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...");
});

Merci!

19
Mat

Je l'ai essayé sur Windows normal cmd, et cela a fonctionné comme il se doit On dirait que c'est un problème avec git bash. 

10
Mat

J'ai eu le même problème avec npm. Mais finalement, je savais que c’était un problème avec git lui-même.

Dscho a commenté GitHub il y a 15 jours. Il a dit qu'ils travaillaient à résoudre ce problème dans la prochaine version. Il a également partagé le fichier exact msys-2.0.dll qui peut résoudre le problème pour les personnes qui ne peuvent pas attendre.

Personnellement, je ne pouvais pas attendre: p. J'ai donc essayé, téléchargé le fichier et le jeté dans le dossier git, comme il l'a dit. Et le problème est parti! C'était génial!

Mais veillez à effectuer une sauvegarde avant de remplacer le fichier.

J'ai aussi essayé de le tuer après avoir exécuté express comme je le faisais auparavant; en utilisant taskkill /im node.exe sur la cmd mais il n’y avait aucun processus à trouver.

Consultez ce problème sur GitHub , et recherchez le nom du fichier msys-2.0.dll pour obtenir le commentaire plus rapidement.

4
YahiaRefaiea

J'utilise git bash sur ma machine Windows et je suis confronté à ce problème depuis environ un mois.

Je ne sais toujours pas ce qui le cause mais j'ai trouvé un autre moyen de l'arrêter.

  1. Ouvrir Gestionnaire de tâches
  2. Allez dans le Processus tab
  3. Recherchez node.exe puis appuyez sur End Process

Cela m'a permis d'arrêter le serveur rapidement.

2
Gene Parcellano

Ctrl + C ne tue pas le serveur. La résolution du problème utilisait l'extrait de code suivant dans server.js:

process.on('SIGINT', function() {
  console.log( "\nGracefully shutting down from SIGINT (Ctrl-C)" );
  // some other closing procedures go here
  process.exit(1);
});

Cela a fonctionné pour moi.

Vous pouvez également rechercher d'autres solutions mentionnées à Arrêt progressif dans NodeJS

1
Pankaj Shinde

J'ai rencontré ce problème dans MSYS2 approprié , même dans la dernière version (x64 2018-05-31).

Heureusement, Git pour Windows conservez un environnement d’exécution MSYS2 personnalisé. Ils ont des correctifs qui n’ont pas été envoyés en amont, notamment un correctif qui corrige l’émulation de SIGINT, SIGTERM et SIGKILL .

Discussion: https://github.com/nodejs/node/issues/16103

J'ai été en mesure de faire en sorte que ma plate-forme "MSYS2 appropriée" utilise le runtime MSYS2 de Git for Windows, en suivant ces instructions .

Répété ici pour la postérité:

Installer à l'intérieur de MSYS2 proprement dit

Ce guide suppose que vous souhaitez utiliser la version 64 bits de Git pour Windows.

Git pour Windows étant basé sur MSYS2, il est possible d’installer le package git dans une installation MSYS2 existante. Cela signifie que si vous utilisez déjà MSYS2 sur votre ordinateur, vous pouvez utiliser Git pour Windows sans exécuter le programme d'installation complet ni utiliser la version portable.

Notez cependant qu'il y a quelques réserves pour aller de cette façon. Git pour Windows a créé des correctifs pour msys2-runtime qui n'ont pas été envoyés en amont. (Cela avait été planifié, mais cela a été déterminé dans le problème # 284 que cela ne se produirait probablement pas.) Cela signifie que vous devez installer Git pour Windows personnalisé msys2-runtime pour disposer d'une git entièrement fonctionnelle dans MSYS2.

Voici les étapes à suivre:

  1. Ouvrez un terminal MSYS2.
  2. Editez /etc/pacman.conf et juste avant le [mingw32] (ligne n ° 71 sur ma machine), ajoutez le référentiel de packages git-for-windows:

    [git-for-windows]
    Server = https://wingit.blob.core.windows.net/x86-64 
    

    et éventuellement aussi le référentiel MINGW uniquement pour l'architecture opposée (c'est-à-dire MINGW32 pour SDK 64 bits):

    [git-for-windows-mingw32]
    Server = https://wingit.blob.core.windows.net/i686
    
  3. Autoriser la clé de signature (il peut être nécessaire de répéter cette étape de temps en temps jusqu'à ce que https://github.com/msys2/msys2/issues/62 soit corrigé)

    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. Puis synchronisez le nouveau référentiel

    pacboy update
    
  5. Ceci met à jour msys2-runtime et vous demandera donc de fermer la fenêtre (not quittez le processus pacman). Ne paniquez pas, fermez simplement tous les shells MSYS2 et programmes MSYS2 actuellement ouverts. Une fois que tous sont fermés, redémarrez un nouveau terminal.

  6. Puis synchronisez encore (mettant à jour la partie non centrale des paquets):

    pacboy update
    
  7. Et enfin, installez les paquets Git/cURL:

    pacboy sync git:x git-doc-html:x git-doc-man:x git-extra: curl:x
    
  8. Enfin, vérifiez que tout s'est bien passé en effectuant git --version dans un shell MINGW64 et que celui-ci devrait générer quelque chose comme git version 2.14.1.windows.1 (ou plus récent).

Remarque: J'ai trouvé que le paquet git-extra installé à l'étape 7 était assez intrusif (il ajoute un message "Bienvenue dans le kit de développement Git pour Windows!" À chaque terminal que vous ouvrez) le avec pacman -R git-extra.

Note 2: J'ai également constaté que le runtime MSYS2 de Git for Windows s'ouvre dans un répertoire de départ différent de celui de MSYS2. Cela signifie également qu'il lit dans le mauvais profil bash. J'ai résolu ce problème en ajoutant une variable d'environnement à Windows dans le Panneau de configuration: HOME=/C/msys64/home/myusername

1
Birchlabs

Ceci est probablement dû à un problème avec votre console qui n’envoie pas la commande avec précision au processus. C'est assez courant, surtout lorsque vous utilisez des consoles tierces telles que cmdr/conemu.

La solution?

Appuyez simplement sur ctrl + c plusieurs fois jusqu'à sa fermeture: P

0
lunchtime

Parfois, le processus de nœud se bloque. Recherchez l'ID de processus à l'aide de ps. Vous souhaiterez peut-être grep pour un noeud, puis tuer le processus à l'aide de kill -9 [PID]

0
Abdulrahman Atta

Utilisez Ctrl + C, puis entrez:> pm2 tout arrêter

Cela arrêtera tous les serveurs ou lorsque vous obtiendrez une pile avec nodejs.

0
M.Quan

J'ai pu résoudre ce problème en vérifiant les ports à l'aide de TCP View et en réalisant que mon serveur de nœud était en cours d'exécution même si j'avais appuyé sur ctrl-C pour l'arrêter. Je suggère de tuer entièrement le terminal sur lequel vous exécutez le noeud.

0
Janac Meena