parar todas as instâncias do servidor node.js.


186

Esta é a minha primeira vez trabalhando com Node.js e me deparei com este problema:

Eu iniciei um servidor Node através do plug-in de um IDE. Infelizmente, não posso usar o terminal do IDE. Então, eu tentei executar o script na linha de comando.

Esse é o problema - estou usando o módulo Express e meu aplicativo está escutando alguma porta (8080). Quando inicio o aplicativo na linha de comando, ele lança este erro:

events.js:71
    throw arguments[1]; // Unhandled 'error' event
                   ^
Error: listen EADDRINUSE
    at errnoException (net.js:770:11)
    at HTTPServer.Server._listen2 (net.js:910:14)
    at listen (net.js:937:10)
    at HTTPServer.Server.listen (net.js:986:5)
    at Object.<anonymous> (C:\xampp\htdocs\node\chat\app.js:5:5)
    at Module._compile (module.js:449:26)
    at Object.Module._extensions..js (module.js:467:10)
    at Module.load (module.js:356:32)
    at Function.Module._load (module.js:312:12)
    at Module.runMain (module.js:492:10)

Mesmo não tendo muita certeza de qual poderia ser esse erro, presumi que é porque o aplicativo está escutando uma porta que já está em uso. Então eu fiz:

netstat -an

eu consigo ver

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING

É porque o servidor Node já está iniciado quando tentei iniciá-lo a partir do IDE.

Então, eu quero saber como posso parar todas as instâncias do servidor? Além disso, se você puder me dizer como detectar o que está sendo executado em uma porta e matá-la.


1
Desculpe, eu não mencionei que estou no ambiente Windows. Poste os comandos que são relevantes. Obrigado
Kiran Ambati

e também você pode encontrar a tarefa node.js no gerenciador de tarefas do Windows. encontre o progresso cujo nome é Node.js: do lado do servidor ... e abra as informações detalhadas, você encontrará o pid e os detalhes do progresso dos seus nodejs #
Xiuying Lan

Este é o que funcionou para mim: superuser.com/questions/1183057/…
desconhecido

Respostas:


422

Máquina Windows:

Precisa matar um servidor Node.js.e você não possui nenhum outro processo do Node em execução, pode dizer à sua máquina para matar todos os processos nomeados node.exe. Isso seria assim:

taskkill /im node.exe

E se os processos ainda persistirem, você pode forçar o encerramento dos processos adicionando o /fsinalizador:

taskkill /f /im node.exe

Se você precisar de um controle mais refinado e precisar matar apenas um servidor que esteja sendo executado em uma porta específica, poderá netstatencontrar o ID do processo e enviar um sinal de interrupção para ele. Portanto, no seu caso, onde está a porta 8080, você pode executar o seguinte:

C:\>netstat -ano | find "LISTENING" | find "8080"

A quinta coluna da saída é o ID do processo:

  TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       14828
  TCP    [::]:8080              [::]:0                 LISTENING       14828

Você pode então matar o processo com taskkill /pid 14828. Se o processo se recusar a sair, basta adicionar o /fparâmetro (force) ao comando.


Máquina Linux:

O processo é quase idêntico. Você pode matar todos os processos do Node em execução na máquina (use -$SIGNALse SIGKILLfor insuficiente):

killall node

Ou também netstat, usando , você pode encontrar o PID de um processo escutando em uma porta:

$ netstat -nlp | grep :8080
tcp        0      0 0.0.0.0:8080         0.0.0.0:*                   LISTEN      1073/node

O ID do processo, neste caso, é o número antes do nome do processo na sexta coluna, que você pode passar para o killcomando:

$ kill 1073

Se o processo se recusar a sair, basta usar o -9sinalizador, que é um SIGTERMe não pode ser ignorado:

$ kill -9 1073

1
desculpe, como exatamente eu posso usar esses comandos? process.exit () pode estar no código? mas o servidor já está iniciado. É provável que tenha sido iniciado com o nó de comando app.js, mas não com o node-dev app.js. E "node killall" não está funcionando. Estou fazendo errado? Obrigado
Kiran Ambati

1
process.exit()no seu aplicativo faz com que a instância do NodeJS seja fechada. killall nodeno bash mataria todas as instâncias do NodeJS em execução na sua máquina.
Hexacyanide

obrigado @hexacyanide. Estou desenvolvendo no Windows. Isso torna o nó killall um comando inválido porque não posso usá-lo na linha de comando.
91113 Kiran Ambati

3
Tente taskkill /IM node.exe. Isso matará todos os processos nomeados node.exe.
Hexacyanide

1
Eu tive que usar taskkill / F / IM node.exe para fazê-lo funcionar, obrigado!
Luis

75

O caminho mais rápido é

killall node

Funciona com Linux, OS X


Método fácil, mas se qualquer outro aplicativo estiver em execução, precisamos ser mais específicos.
Rajeev Uppala 19/02/19

Nao funciona para mim. node: no process foundAlém disso, quando eu grep para processos de um nó que são executados na porta específica, o ID do processo possui em -vez de um número em si.
Giorgi Gvimradze 16/08/19

49

Você pode usar lsofo processo get que vinculou à porta necessária.

Infelizmente, os sinalizadores parecem diferentes, dependendo do sistema, mas no Mac OS X você pode executar

lsof -Pi | grep LISTEN

Por exemplo, na minha máquina, recebo algo como:

mongod     8662 jacob    6u  IPv4 0x17ceae4e0970fbe9      0t0  TCP localhost:27017 (LISTEN)
mongod     8662 jacob    7u  IPv4 0x17ceae4e0f9c24b1      0t0  TCP localhost:28017 (LISTEN)
memcached  8680 jacob   17u  IPv4 0x17ceae4e0971f7d1      0t0  TCP *:11211 (LISTEN)
memcached  8680 jacob   18u  IPv6 0x17ceae4e0bdf6479      0t0  TCP *:11211 (LISTEN)
mysqld     9394 jacob   10u  IPv4 0x17ceae4e080c4001      0t0  TCP *:3306 (LISTEN)
redis-ser 75429 jacob    4u  IPv4 0x17ceae4e1ba8ea59      0t0  TCP localhost:6379 (LISTEN)

O segundo número é o PID e a porta que eles estão ouvindo está à direita antes de "(OUVIR)". Encontre o PID desonesto e kill -9 $PIDtermine com extremo preconceito.


Oi Jacob, por favor, você pode editar a resposta e adicionar a versão do Windows porque estou desenvolvendo no Windows. Obrigado
Kiran Ambati

Eu não tenho idéia de como fazê-lo no Windows, desculpe Kiran.
Jacob Groundwater

Essa é uma ótima resposta, especialmente quando há vários servidores de nós em execução em portas diferentes. Eu posso distinguir facilmente os IDs do processo em execução em cada porta.
Modulitos

25

Terminal Windows e GitBash Eu precisava usar esse comando dentro do terminal Windows / Webstorm / GitBash

cmd "/C TASKKILL /IM node.exe /F"

3
Este fez isso por mim. Obrigado
Adim Victor

1
Este fez isso por mim também. Eu achei a maneira mais rápida de matar todos os processos de nós no Windows.
Asad

16

se você deseja eliminar um processo de nó específico, pode ir para a rota da linha de comandos e digitar:

ps aux | grep node

para obter uma lista de todos os IDs de processo do nó. agora você pode obter seu ID do processo (pid) e faça:

kill -9 PID

e se você deseja eliminar todos os processos do nó, faça:

killall -9 node

A opção -9 é como a tarefa final no Windows. forçará o processo a terminar. você pode fazer:

kill -l

para ver todas as opções do comando kill e seus comentários.


8

Você pode tentar isso:

taskkill /IM node.exe -F

7

Linux

Para impressionar seus amigos

ps aux | grep -i node | awk '{print $2}' | xargs  kill -9

Mas é esse que você vai se lembrar

killall node


2

Se você estiver usando o Windows, siga este procedimento:

  1. Abra o gerenciador de tarefas, procure este processo: Gerenciador de tarefas mostrando o processo do nó - Node.js. JavaScript do lado do servidor

  2. Em seguida, basta clicar com o botão direito e "Finalizar tarefa".

  3. É isso, agora todos os comandos npm são executados desde o início.


1

Solução multiplataforma, estável e melhor:

use fkill para matar o processo que está levando sua porta:

fkill -f :8080

Para instalar o fkill, use o comando: npm i -g fkill


1

podes tentar

killall node

você também pode tentar

killall nodejs

Esses comandos já foram postados várias vezes. Não há problema em publicá-las novamente, mas, em seguida, você deve pelo menos adicionar mais alguma explicação para a sua resposta de forma que outros possam aprender com ele
Nico Haase


0

Estou usando o sistema operacional Windows.

Eu matei todo o processo do nó e reiniciei o aplicativo que funcionava.

experimentar

taskkill /im node.exe

0

Use o seguinte comando para eliminar e reiniciar o servidor do nó a partir do arquivo em lotes

    @echo off
cd "D:\sam\Projects\Node"
taskkill /IM node.exe -F
start /min cmd /C "node index.js"
goto :EOF


-3

Pressione em cmd ou bash: Ctrl + C


Isso funciona apenas na visualização do terminal com o processo do nó em execução e também não garante a eliminação do processo.
Design by Adrian
Ao utilizar nosso site, você reconhece que leu e compreendeu nossa Política de Cookies e nossa Política de Privacidade.
Licensed under cc by-sa 3.0 with attribution required.