Eu tenho um servidor TCP simples que escuta em uma porta.
var net = require("net");
var server = net.createServer(function(socket) {
socket.end("Hello!\n");
});
server.listen(7777);
Começo com ele node server.js
e depois o fecho com Ctrl + Z no Mac. Quando tento executá-lo novamente node server.js
, recebo esta mensagem de erro:
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)
Estou fechando o programa da maneira errada? Como posso impedir que isso aconteça?
fg
após Ctrl-Z, estará de volta de onde parou. Portanto, seu nó anterior ainda está em execução. Cuidado se você estiver fazendo isso com outros comandos também!Ctrl+Z
ação, uma metodologia adequada poderia serfg
reviver o processo e depoisCtrl+C
matá-lo adequadamente.Respostas:
Para finalizar o programa, você deve usar Ctrl+ C. Se você fizer isso, ele envia
SIGINT
, o que permite que o programa termine normalmente, desatando-se de qualquer porta em que estiver ouvindo.Veja também: https://superuser.com/a/262948/48624
fonte
Ctrl + C
Nao funciona para mim. Somente^C
é digitado no console e o programa não sai.Ctrl+C
funciona bem. De qualquer forma, esse é um problema separado do seu problema real. Você deve postar uma pergunta "Ctrl + C não funciona" no SuperUser.com.kill -9
, mas eu não faria. Você realmente tem certeza de que seu aplicativo ainda é aquele que mantém as portas abertas? Eu nunca tive esse problema. Assim que meu aplicativo termina, as conexões são sempre imediatamente encerradas. Eu usaria o netstat para determinar se seu aplicativo ou outra coisa está demorando nessa porta.Ctrl+ Zsuspende, o que significa que ainda pode estar em execução.
Ctrl+ Cirá realmente matá-lo.
você também pode matá-lo manualmente assim:
Encontre o ID do processo (segundo da esquerda):
Isso também pode funcionar
fonte
killall node
em sua resposta, uma vez que é realmente a opção mais fácil e confiável (contanto que você está ok com a matança de todas as instâncias)Ou, como alternativa, você pode fazer tudo isso em uma linha:
Você pode substituir o nó dentro de '\ snode \ s' por qualquer outro nome de processo.
fonte
Continue e finalize o processo:
Ctrl+ Zsuspende, o que significa que ainda está sendo executado como um processo em segundo plano suspenso.
Você provavelmente está agora em um prompt do terminal ...
Dê o comando
fg
para retomar o processo em primeiro plano.digite Ctrl+ Cpara matá-lo corretamente.
Como alternativa, você pode matá-lo manualmente assim:
( NOTA: os seguintes comandos podem exigir root, assim
sudo ...
como seu amigo)ou, se você não tiver pkill, isso pode funcionar:
ou talvez isso:
Às vezes, o processo listará seu próprio grep; nesse caso, você precisará:
.
h / t @ruffin a partir dos comentários sobre a pergunta em si. Eu tive o mesmo problema e o comentário dele me ajudou a resolvê-lo.
fonte
você pode digitar
.exit
para sair do nó js REPLfonte
Se você estiver executando o Node.js interativamente (o REPL):
Ctrl+ Co levará de volta para> prompt e digite:
ou apenas use Ctrl+ D.
fonte
$ sudo killall node
em outro terminal funciona no mac , enquantokillall node
não está funcionando:fonte
no linux tente:
pkill node
no windows:
ou
fonte
Embora essa seja uma resposta tardia, achei isso nos documentos do NodeJS :
Para resumir, você pode sair por:
.exit
nodejs REPL.<ctrl>-C
duas vezes.<ctrl>-D
.process.exit(0)
o que significa uma saída natural do REPL. Se você deseja retornar qualquer outro status, pode retornar um número diferente de zero.process.kill(process.pid)
é a maneira de matar usando a nodejs api de dentro do seu código ou do REPL.fonte
Estou adicionando esta resposta porque, para muitos projetos com implantações de produção, temos scripts que interrompem esses processos e não precisamos.
Uma maneira limpa de gerenciar seus processos do Node Server é usando o
forever
pacote (deNPM
).Exemplo:
Instale para sempre
npm install forever -g
Executar servidor do nó
forever start -al ./logs/forever.log -ao ./logs/out.log -ae ./logs/err.log server.js
Resultado:
info: Forever processing file: server.js
Servidor do nó de desligamento
forever stop server.js
Resultado
info: Forever stopped process: uid command script forever pid id logfile uptime [0] sBSj "/usr/bin/nodejs/node" ~/path/to/your/project/server.js 23084 13176 ~/.forever/forever.log 0:0:0:0.247
Isso encerrará o aplicativo do servidor de forma limpa.
fonte
Se você deseja parar seu servidor
npm stop
ou algo parecido com isto. Você pode escrever o código que interrompe o processo do servidor como:Verifique este link para obter detalhes: https://gist.github.com/dominhhai/aa7f3314ad27e2c50fd5
fonte
Encontrei um problema em que havia vários servidores de nó em execução e quero matar um deles e reimplementá-lo a partir de um script.
Nota: Este exemplo está em um shell bash no Mac.
Para fazer isso, certifique-se de fazer minha
node
ligação o mais específica possível. Por exemplo, em vez de ligarnode server.js
do diretório de aplicativos, eu chamonode app_name_1/app/server.js
Então eu posso matá-lo usando:
kill -9 $(ps aux | grep 'node\ app_name_1/app/server.js' | awk '{print $2}')
Isso matará apenas o processo do nó executando app_name_1 / app / server.js.
Se você executou
node app_name_2/app/server.js
esse nó, o processo continuará sendo executado.Se você decidir matá-los, poderá usá-los
killall node
como outros já mencionaram.fonte
Resposta tardia, mas no Windows, abrir o gerenciador de tarefas com CTRL + ALT + DEL e depois matar os processos Node.js. solucionará esse erro.
fonte
você pode trabalhar com o seguinte comando para ser específico no kill localserver (aqui: 8000)
Ele fornecerá os seguintes grupos de TCPs:
Ele matará processId correspondente ao TCP *: 8000
fonte
Para MacOS
Execute o código abaixo e pressione Enter
fonte
Você pode usar o fusor para obter o que deseja fazer.
Para obter os IDs de processo das tarefas em execução em uma porta, você pode:
Digamos que a porta seja 8888, o comando se torna:
E para matar um processo que está sendo executado em uma porta, basta adicionar a opção -k.
Exemplo (a porta é 8888):
É isso aí! Ele fechará o processo de escuta na porta. Eu costumo fazer isso antes de executar meu aplicativo de servidor.
fonte
Meu caso de uso: no MacOS , execute / execute novamente vários servidores de nó em portas diferentes de um script
executar :
"cd $PATH1 && node server1.js & cd $PATH2 && node server2.js & ..."
stop1 :
"kill -9 $(lsof -nP -i4TCP:$PORT1 | grep LISTEN | awk '{print $2}')"
stop2, stop3 ...
executar novamente :
"stop1 & stop2 & ... & stopN ; run
para obter mais informações sobre como localizar um processo por uma porta: Quem está ouvindo uma determinada porta TCP no Mac OS X?
fonte
No Windows, procure primeiro o PID com o número da sua porta
Depois disso, mate a tarefa, verifique se você está na raiz do seu drive "c" E o comando será
taskkill /F /PID your pid
fonte
se você estiver usando o código VS e o terminal, selecione o nó no menu suspenso do lado direito primeiro e depois pressione Ctrl + C. Então funcionará
Pressione y quando solicitado.
obrigado
fonte