2012-06-30 12 views
13

Ich versuche, ein Build-System für Node.js auf Sublime einzurichten, so dass ich F7 drücken kann, um "Node" in der geöffneten Datei aufzurufen. Das Problem ist, dass der Prozess dann für immer offen ist. Wenn ich F7 das zweite Mal benutze, bekomme ich ein Add-in-use.Wie kann man einen offenen Prozess auf node.js beenden?

Gibt es eine Möglichkeit, den geöffneten "node.exe" -Prozess von node.js zu beenden?

+0

Mögliche Duplikate von [alle Instanzen von node.js Server stoppen] (http://StackOverflow.com/questions/14790910/stop-all-instances-of-node-js-server) – rofrol

Antwort

29

Mit dem folgenden Satz von Befehlen, der Prozess an einem bestimmten Port laufen zu identifizieren und von der Befehlszeile termiate

sudo fuser -v 5000/tcp // gives you the process running on port 5000 

Es Ausgabedetails ähnlich den unten

gezeigt
     USER  PID ACCESS COMMAND 
    5000/tcp:   almypal  20834 F.... node 

Verwenden Sie dann

sudo fuser -vk 5000/tcp 

, um den Prozess zu beenden. Überprüfen Sie noch einmal mit

sudo fuser -v 5000/tcp 

, um sicherzustellen, dass der Prozess beendet wurde.

Unter Windows können Sie die folgenden Schritte verwenden

C:\> tasklist // will show the list of running process' 

    Image Name  PID Session Name Session# Mem Usage 
    System   4 console     0 236 K 
    ... 
    node.exe   3592 console    0 8440 k 

Beachten Sie die PID zu Ihrem Knoten Prozess entspricht, in diesem Fall 3592. Weiter laufen taskkill den Prozess zu beenden.

C:\> taskkill /F /PID 3592 

Oder/IM-Schalter

C:\> taskkill /F /IM node.exe 
+2

Große Antwort, aber ... und für Windows? – MaiaVictor

+0

Haben Sie die Antwort mit Details für Windows aktualisiert. – almypal

+0

Nun gerade nicht genau das, was ich gefragt habe, aber die Befehle können von node.js verwendet werden, und wenn Sie sie ein wenig ändern (von Prozess-ID zu Prozess Name) es tut, was ich fragte, so ist dies die beste Antwort, die ich bekam . – MaiaVictor

2

Von innen Node.js:

var die = function(quitMsg) 
{ 
    console.error(quitMsg) 
    process.exit(1); 
} 

die('Process quit'); 

Es gibt bestimmte methods available für spannendsten, die für POSIX nur verfügbar sind (dh nicht Windows) das wird Beenden Sie einen Prozess mit seiner Prozess-ID.

Beachten Sie auch, dass Sie einen Abschuss schicken könnte fähig sein (Signal) unter Verwendung dieses Verfahrens, das nicht für Windows sagt es nicht verfügbar ist:

process.kill(pid, [signal]) 
+0

Aber woher kenne ich die PID der anderen laufenden Node.exe? – MaiaVictor

+0

@Dokkat 'console.log ('Dieser Prozess ist pid' + process.pid);' wird die PID von der anderen Node.exe ausgeben, dann führen Sie die neue mit einem Befehlszeilenargument der PID dieses Prozesses und in das neue Skript, das Sie 'SIGTERM' an die PID senden, die Sie in' argv' haben. Alle Informationen sind in diesem Link oben verfügbar. –

+1

@Viclib Wenn Sie noch interessiert sind, stieß ich tatsächlich auf dieses spezielle Problem, und die Verwendung von 'process.kill (pid, [Signal])' war alles was ich brauchte. Ich kann mehr Informationen geben, wenn Sie möchten. –

0

Wenn sublime Sie sagen Sublime Text-Plugin ist, ich habe das gleiche Problem, und TCP-Server eine Meldung 'Shutdown' aus python-Code senden, dann

app.js

TCPserver 
     .on('connection', function(socket) 
     { 
      socket.pipe(require('through') 
       (function(data) 
       { //---------------------------- 
        if (data.toString() === 'shutdown') 
        { 
         process.exit(); 
        } 
        //-------------------------- 
       })); 
      socket.end(); 
     }) 
0

Simil arly zu dem, was @ Alex W sagte, können Sie ein Kill-Signal an den Prozess senden, so lange, wie Sie seine Prozess-ID haben oder PID mit der folgenden Knotenfunktion:

process.kill(pid, [signal])

In meinem Fall hatte ich die PIDs leicht verfügbar, wie ich child_process().spawn.pid laichen. Ich habe es getestet und es funktioniert auf Win 7 x64.

Verwandte Themen