Como interromper o uso da porta 8080 com processo KILL PID?

Flávio Conca
5 min readApr 24, 2022

Hoje, após instalar um pacote pelo NPM, ao tentar acessar meus arquivos via Node.JS a porta 8080 estava inoperante para o servidor. O erro 'listen EADDRINUSE: address already in use :::8080' era apresentado toda hora que eu queria iniciar um arquivo pelo servidor Node.JS ou pelo Nodemon.

Esse erro de processo pode ocorrer com qualquer porta, 8080, 8090, 3030… Para resolver e interromper o processo usaremos o comando 'LSOF' e 'KILL' para resolvermos com facilidade.

O comando LSOF

O comando 'LSOF' significa List Open Files e é utilizado para listar os arquivos abertos e seus detalhes, como caminhos, processos e usuários.

Primeiramente, vamos começar com ele.

sudo lsof

O que você viu foi uma lista gigante com um monte de processos. Se voltar ao começo da lista vai ver que todo processo é separado por COMMAND, PID, USER, FD, TYPE, DEVICE, SIZE/OFF e NODE/NAME. Nesta lista, o que precisaremos observar são os PID (Process IID).

Ok!

Agora você entendeu que os processos são acessíveis pelo terminal. O que vamos fazer agora é listar os processos usados pela porta 8080:

sudo lsof -i :8080

Após este comando vai ser exibido tudo que está utilizando a porta 8080. Esse comando listará todos os PID que escutam nesta porta, uma vez que você tenha o PID, você pode finalizá-lo com o 'kill' exatamente para 'matar' o processo ativo na porta.

No meu caso era um processo usado pelo pacote HTTPD com vários PID's. Então, se matar o primeiro talvez funcione para todos, mas, pode ser que no seu caso precisar matar mais de um processo de uma vez só.

Observe os processos:

Então, para interromper os processos vamos precisar matá-los. Para este passo vamos usar o comando 'kill' utilizado para interromper, encerrar ou pausar processos. O comando pode ser usado como abaixo:

kill -l

Agora, você listou (-l) as opções do comando 'kill' e vai surgir 28 opções de uso. Este é como se fosse o seu manual com diferentes sinais do comando 'kill' e seus respectivos números. Embora existam muitos sinais disponíveis, na maioria das vezes utilizamos o SIGKILL (9) e SIGTERM (15).

Neste exemplo, usaremos o SIGKILL (9). Então, este comando deverá seguir conforme a sintaxe abaixo:

kill -9 {PID}

Onde PID é o ID do Processo.

No meu caso, vou começar com o processo de ID número 837:

kill -9 837

Isso acabou de interromper o processo do comando HTTPD usado pelo NODE.JS que estava bloqueando a porta 8080. Mas também, você pode matar mais de um processo de uma vez só, conforme a sintaxe:

kill -9 pid1 pid2 pid3

Então, usando a referência da figura acima:

kill -9 837 905 906 907 908 909 1107

E se não funcionar, o que acho difícil, temos a opção 'hard' do comando 'kill' para matar o processo da aplicação inteira.

killall node

Aí é brabo!

BÔNUS

Comando PKILL

Pra você que chegou até aqui, via um bônus.

Outro comando que pode ser usado caso tenha dificuldade com o 'kill' é o 'pkill', que é uma vertente do comando kill onde você pode especificar o nome do processo ou um padrão para encontrar o processo.

Por exemplo:

Você está com o WhatsApp travado no seu computador e não consegue encerrá-lo. Simples, use um comando do 'pkill' e o programa será encerrado bem rápido. Quer tentar?

pkill WhatsApp

Ou se seu navegador Google Chrome travou e não consegue fechar.

pkill Chrome

Cuidado que se fizer isso ele encerra a aplicação sem notificar ou solicitar confirmação para encerramento. Para isso, caso tenha dúvida, você pode listar os processos que iniciam com CHR, no caso do Chrome.

pgrep -l chr

Esta lista acima é dos processos que meu Google Chrome tinha antes de um comando 'Kill'. Observe que são vários processos e eu só tinha 2 abas.

Comando Killall

A diferença básica entre os comandos killall e kill é que o killall pode encerrar o processo pelo nome, enquanto o comando kill utiliza o pid.

Um exemplo do comando é:

killall chrome

Este é parecido com o pkill. Entretanto, o killall funciona apenas com o nome exato do comando, e não com nome parcial (como o pkill). Este é um dos motivos pelo qual o killall é mais seguro.

Outra diferença é o pacote root a qual estes comandos pertencem. No Linux, o killall pertence ao pacote psmisc. Já comandos como ps, top, kill e pkill pertencem ao pacote procps.

O killall tambén é diferente por poder ser personalizado para encerrar processos baseado no tempo. Se você deseja encerrar um processo que está executando há menos de 40 minutos, você pode utilizar:

killall -y 40m [nome do processo]

Você também pode utilizar uma das opções abaixo juntamente com o comando killall:

  • s — seconds (segundos).
  • m — minutes (minutos).
  • h — hours (horas).
  • d — days (dias).
  • w -weeks (semanas).
  • M — months (meses).
  • y — years (anos).

É isso!

--

--