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 0para ver o nome completo:lsof +c 0 -nP -iTCP -sTCP:LISTEN. - PID é o ID do processo que você passa para
killoups. - 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.
*:3000significa que o servidor aceita conexões em todas as interfaces de rede.127.0.0.1:3000ou[::1]:3000significa 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.
- Obtenha o PID com
lsof -nP -iTCP:3000 -sTCP:LISTEN. - Execute
ps -o pid,ppid,command -p <PID>para ver o comando completo que o iniciou. - Execute
lsof -a -p <PID> -d cwdpara ver a pasta em que ele está rodando, que em geral é a pasta do projeto. - 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.