2012-06-30 15 views
13

Sto provando a configurare un sistema di compilazione per Node.js in sublime, così posso premere F7 per chiamare "nodo" sul file aperto. Il problema è che il processo è quindi aperto per sempre, quindi, la seconda volta che utilizzo F7, ho un add-in-use.Come uccidere un processo aperto su node.js?

C'è un modo per eliminare il processo "node.exe" aperto da node.js?

+0

Possibile duplicato di [interrompere tutte le istanze del server node.js] (http://stackoverflow.com/questions/14790910/stop-all-instances-of-node-js-server) – rofrol

risposta

29

Utilizzare la seguente serie di comandi per identificare il processo in esecuzione su una data porta e termiate dalla linea di comando

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

Sarà Dettagli uscita simile a quella mostrata di seguito

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

Quindi utilizzare

sudo fuser -vk 5000/tcp 

per terminare il processo. Controllare ancora una volta usando

sudo fuser -v 5000/tcp 

per assicurarsi che il processo sia terminato.

Su Windows è possibile utilizzare le seguenti operazioni

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 

Annotare il PID corrispondente al vostro processo di nodo, in questo caso 3592. Avanti corsa taskkill per terminare il processo.

C:\> taskkill /F /PID 3592 

O/IM interruttore

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

Ottima risposta ma ... e per Windows? – MaiaVictor

+0

Ho aggiornato la risposta con i dettagli per Windows. – almypal

+0

Ben notato solo non esattamente quello che stavo chiedendo, ma i comandi possono essere utilizzati da node.js e se li modifichi un po '(dall'ID processo al nome del processo) fa quello che ho chiesto, quindi questa è la risposta migliore che ho ottenuto . – MaiaVictor

2

Dall'interno Node.js:

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

die('Process quit'); 

Ci sono certi methods available per uscire che sono disponibili solo per POSIX (cioè non Windows) che verrà uscire da un processo tramite il suo id di processo.

Si noti inoltre che si potrebbe essere in grado di inviare un kill() del segnale con questo metodo, che non dire che non è disponibile per Windows:

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

Ma come faccio a sapere il pid dell'altro node.exe in esecuzione? – MaiaVictor

+0

@Dokkat 'console.log ('Questo processo è pid' + process.pid);' stamperà il pid dall'altro Node.exe, quindi eseguirai il nuovo con un argomento della riga di comando del pid di quel processo, e in il nuovo script invii 'SIGTERM' al pid che hai in' argv'. Tutte le informazioni sono disponibili in questo link qui sopra. –

+1

@Viclib se sei ancora interessato, in realtà mi sono imbattuto in questo problema specifico, e l'utilizzo di 'process.kill (pid, [signal])' era tutto ciò di cui avevo bisogno. Posso dare più informazioni se vuoi. –

0

Se sublime che dici è plug sublimeText, ho lo stesso problema, e mando server TCP un messaggio 'shutdown' dal codice Python, quindi

app.js

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

Simil arly a quello che ha detto @alex W, è possibile inviare un segnale di kill per il processo fino a quando si dispone il suo ID di processo, o PID usando la seguente funzione del nodo:

process.kill(pid, [signal])

Nel mio caso, ho avuto la PID prontamente disponibili mentre stavo generando child_process().spawn.pid. L'ho provato e funziona su Win 7 x64.

Problemi correlati