Glossário/Quando algo dá errado

Porta em escuta

Também: portas abertas, o que está usando a porta 3000

Resposta rápida

Uma porta em escuta é uma porta de rede em que um processo está esperando conexões de entrada, como um servidor web na porta 3000. Só um processo pode escutar em uma porta e endereço de cada vez, e por isso aparecem erros como “address already in use”.

Servidores de desenvolvimento, bancos de dados e alguns apps abrem portas em escuta. Quando você inicia um servidor e ele falha porque a porta está ocupada, outro processo, muitas vezes uma cópia anterior do mesmo servidor, ainda está escutando nela.

O Monitor de Atividade pode mostrar os arquivos e portas abertos de um processo, mas o jeito mais rápido de descobrir qual processo é dono de uma porta é o comando lsof no Terminal.

Como descobrir o que está usando uma porta

Execute lsof -nP -iTCP:3000 -sTCP:LISTEN no Terminal, trocando 3000 pela sua porta. O resultado mostra o nome do comando e o PID dele.

Para listar todas as portas TCP em escuta, execute lsof -nP -iTCP -sTCP:LISTEN. Coloque sudo na frente para incluir os processos de outros usuários.

Como liberar uma porta

Se o processo é um servidor que você iniciou, pare-o primeiro do jeito normal, por exemplo com Control-C no terminal em que ele roda. Se não for, execute kill <PID> com o PID que o lsof mostrou. Use kill -9 <PID> só se ele não sair.

Confira o nome do processo antes de pará-lo. Algumas portas pertencem a serviços do macOS, como o Receptor AirPlay, que escuta nas portas 5000 e 7000 nas versões recentes do macOS.

Como ver as portas no Monitor de Atividade

Clique duas vezes em um processo e abra a aba Portas e Arquivos Abertos. Ela lista os arquivos e as conexões de rede que o processo tem abertos.

Como ler o resultado do lsof

Cada linha é um socket aberto. Um servidor em geral mostra duas linhas, uma para IPv4 e outra para IPv6, com o mesmo PID.

  • COMMAND é o nome do processo, cortado em 9 caracteres por padrão. Adicione +c 0 para ver o nome completo: lsof +c 0 -nP -iTCP -sTCP:LISTEN.
  • PID é o ID do processo que você passa para kill ou ps.
  • USER é a conta que o executa. Os processos do root em geral fazem parte do macOS ou de um serviço instalado.
  • NAME mostra o endereço e a porta. *:3000 significa que o servidor aceita conexões em todas as interfaces de rede. 127.0.0.1:3000 ou [::1]:3000 significa que só este Mac pode se conectar.

Como ver a qual projeto um servidor de desenvolvimento pertence

O nome do processo muitas vezes é só node, python ou ruby, o que não diz qual projeto está rodando. Dois comandos respondem isso.

  1. Obtenha o PID com lsof -nP -iTCP:3000 -sTCP:LISTEN.
  2. Execute ps -o pid,ppid,command -p <PID> para ver o comando completo que o iniciou.
  3. Execute lsof -a -p <PID> -d cwd para ver a pasta em que ele está rodando, que em geral é a pasta do projeto.
  4. Se o PPID apontar para um shell, o servidor foi iniciado em uma janela de terminal. Pare-o por lá com Control-C, se essa janela ainda estiver aberta.

Por que a porta está ocupada se nada parece estar rodando

Se a porta pertence ao Receptor AirPlay, rode o seu servidor em outra porta ou desative o Receptor AirPlay em Ajustes do Sistema > Geral, na seção do AirDrop.

  • Um servidor de uma sessão anterior ainda está rodando em uma aba ou janela de terminal que você esqueceu.
  • Um servidor foi iniciado em segundo plano, ou por um editor ou outra ferramenta, e não tem janela visível.
  • O servidor travou, mas um processo secundário que ele iniciou ainda está segurando a porta.
  • Um serviço do macOS usa a mesma porta, como o Receptor AirPlay nas portas 5000 e 7000.

A coluna Portas do Monitor de Atividade não mostra portas de rede

O Monitor de Atividade tem uma coluna opcional Portas na aba CPU. Ela conta portas Mach, um mecanismo de mensagens que o macOS usa entre processos, o mesmo número que top mostra como portas. Ela não lista portas de rede. Para as portas de rede, use lsof ou a aba Portas e Arquivos Abertos na janela de informações de um processo.

Perguntas frequentes

Como ver o que está usando a porta 3000 no Mac?

Execute lsof -nP -iTCP:3000 -sTCP:LISTEN no Terminal. Ele mostra o nome e o PID do processo que está escutando naquela porta.

Como matar o processo de uma porta no Mac?

Encontre o PID dele com o lsof e execute kill <PID>. Se ele não sair, kill -9 <PID> o termina na hora.

Como listar todas as portas abertas no Mac?

Execute lsof -nP -iTCP -sTCP:LISTEN para listar as portas TCP em escuta. Adicione sudo para incluir os processos de outros usuários.

O que significa “address already in use”?

Outro processo já está escutando naquela porta e endereço. Encontre-o com lsof -nP -iTCP:<port> -sTCP:LISTEN e depois pare-o ou escolha outra porta.

Por que o lsof não mostra nada para uma porta que está em uso?

O processo pode pertencer a outro usuário ou ao root. Execute o mesmo comando com sudo na frente para incluir todos os processos.

É seguro matar o que estiver na porta 5000 ou 7000?

Não sem conferir o nome. Nas versões recentes do macOS, essas portas muitas vezes são usadas pelo Receptor AirPlay, que você pode desativar nos Ajustes do Sistema.

Relacionados

Passo a passo: Docker usando memória demais.

Procurando algo melhor que o Monitor de Atividade? Veja as melhores alternativas ao Monitor de Atividade para Mac ou navegue por todos os termos do glossário.