373 Stimmen

Node.js-Programm von der Kommandozeile aus stoppen

Ich habe einen einfachen TCP-Server, der auf einen Port wartet.

var net = require("net");

var server = net.createServer(function(socket) {
    socket.end("Hello!\n");
});

server.listen(7777);

Ich beginne es mit node server.js und schließe es dann mit Strg + Z auf dem Mac. Wenn ich versuche, es erneut mit node server.js Ich erhalte diese Fehlermeldung:

node.js:201
        throw e; // process.nextTick error, or 'error' event on first tick
          ^
Error: listen EADDRINUSE
at errnoException (net.js:670:11)
at Array.0 (net.js:771:26)
at EventEmitter._tickCallback (node.js:192:41)

Schließe ich das Programm auf die falsche Weise? Wie kann ich dies verhindern?

426voto

Brad Punkte 151817

Um das Programm zu beenden, sollten Sie Ctrl + C . Wenn Sie das tun, sendet es SIGINT Dies ermöglicht es dem Programm, sich ordnungsgemäß zu beenden und sich von allen Ports, die es abhört, zu trennen.

Siehe auch: https://superuser.com/a/262948/48624

412voto

Jamund Ferguson Punkte 16233

Ctrl + Z unterbricht es, d.h. es kann noch laufen.

Ctrl + C wird es tatsächlich töten.

Sie können es auch manuell wie folgt löschen:

ps aux | grep node

Suchen Sie die Prozess-ID (die zweite von links):

kill -9 PROCESS_ID

Dies kann auch funktionieren

killall node

44voto

Hamid Tavakoli Punkte 4377

Alternativ können Sie auch alle diese Schritte in einer Zeile ausführen:

kill -9 $(ps aux | grep '\snode\s' | awk '{print $2}')

Sie können den Knoten innerhalb von ' \snode\s ' mit einem beliebigen anderen Prozessnamen.

40voto

Metagrapher Punkte 8162

Setzen Sie den Prozess fort und beenden Sie ihn:

Ctrl + Z wird er angehalten, d. h. er läuft weiterhin als angehaltener Hintergrundprozess.

Wahrscheinlich befinden Sie sich jetzt an einer Terminal-Eingabeaufforderung...

  1. Geben Sie den Befehl fg um den Prozess im Vordergrund fortzusetzen.

  2. Typ Ctrl + C um ihn richtig zu töten.


Alternativ dazu, können Sie es manuell wie folgt abschalten:

( HINWEIS: die folgenden Befehle erfordern möglicherweise Root, also sudo ... ist Ihr Freund)

pkill -9 node

oder, wenn Sie kein pkill haben, kann dies funktionieren:

killall node

oder vielleicht dies:

kill $(ps -e | grep node | awk '{print $1}')

manchmal listet der Prozess sein eigenes grep auf, in diesem Fall müssen Sie:

kill $(ps -e | grep dmn | awk '{print $2}')

.


h/t @ruffin aus den Kommentaren zur Frage selbst. Ich hatte das gleiche Problem und sein Kommentar hat mir geholfen, es selbst zu lösen.

24voto

sr77in Punkte 307

Wenn Sie Node.js interaktiv ausführen (die REPL):

Ctrl + C bringt Sie zurück zur Eingabeaufforderung > und gibt dann ein:

process.exit()

oder verwenden Sie einfach Ctrl + D .

CodeJaeger.com

CodeJaeger ist eine Gemeinschaft für Programmierer, die täglich Hilfe erhalten..
Wir haben viele Inhalte, und Sie können auch Ihre eigenen Fragen stellen oder die Fragen anderer Leute lösen.

Powered by:

X