2012-06-30 90 views
13

Estoy tratando de configurar un sistema de compilación para Node.js en sublime, por lo que puedo presionar F7 para llamar a "nodo" en el archivo abierto. El problema es que el proceso está abierto para siempre, entonces, la segunda vez que uso F7 obtengo un complemento de uso.¿Cómo matar un proceso abierto en node.js?

¿Hay alguna manera de matar el proceso "node.exe" abierto de node.js?

+0

Posible duplicado de [detener todas las instancias del servidor node.js] (http://stackoverflow.com/questions/14790910/stop-all-instances-of-node-js-server) – rofrol

Respuesta

29

Utilice el siguiente conjunto de comandos para identificar el proceso que se ejecuta en un puerto determinado y para termiate desde la línea de comandos

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

Será detalles de salida similar a la que se muestra a continuación

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

Luego use

sudo fuser -vk 5000/tcp 

para finalizar el proceso. Verifique nuevamente usando

sudo fuser -v 5000/tcp 

para asegurarse de que el proceso haya finalizado.

En Windows, puede utilizar los pasos siguientes

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 

Nota del PID correspondiente a su proceso de nodo, en este caso, 3592. Nueva edición taskkill para terminar el proceso.

C:\> taskkill /F /PID 3592 

O/IM interruptor

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

Gran respuesta pero ... y para Windows? – MaiaVictor

+0

Han actualizado la respuesta con detalles para Windows. – almypal

+0

Bueno, solo noté que no era exactamente lo que estaba pidiendo, pero los comandos se pueden usar desde node.js y si los cambias un poco (de id. De proceso a nombre de proceso) hace lo que pedí, esta es la mejor respuesta que obtuve . – MaiaVictor

2

Desde dentro Node.js:

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

die('Process quit'); 

Hay cierta methods available para salir que sólo están disponibles para POSIX (es decir, no Windows) que se salir de un proceso por su id de proceso.

Además, tenga en cuenta que es posible que pueda enviar un kill() de la señal usando este método, que no dice que no está disponible para Windows:

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

Pero, ¿cómo sé el pid del otro nodo en ejecución.exe? – MaiaVictor

+0

@Dokkat 'console.log ('Este proceso es pid' + process.pid);' imprimirá el pid del otro Node.exe, luego ejecutará el nuevo con un argumento de línea de comando del pid de ese proceso, y en la nueva secuencia de comandos envía 'SIGTERM' al pid que tiene en' argv'. Toda la información está disponible en ese enlace de arriba. –

+1

@Viclib si todavía está interesado, de hecho me encontré con este problema específico, y el uso de 'process.kill (pid, [signal])' era todo lo que necesitaba. Puedo dar más información si lo desea. –

0

Si usted dice es sublime plugin de Sublime Text, tengo el mismo problema, y ​​enviar un mensaje de servidor TCP 'apagado' de código Python, entonces

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 lo que dijo @Alex W, puede enviar una señal kill para el proceso, siempre y cuando usted tiene su ID de proceso, o PID utilizando la siguiente función de nodo:

process.kill(pid, [signal])

En mi caso, tuve la Los PID están disponibles cuando estaba generando child_process().spawn.pid. Lo probé y funciona en Win 7 x64.

Cuestiones relacionadas