Como posso matar qualquer processo que esteja usando a porta 8080 para que eu possa vagrant up?

97

No MacOSX, estou usando o Packer para construir uma caixa Vagrant, então preciso abri-la e destruí-la continuamente. Estou tentando 'vagrant up' e recebo o erro padrão porque a porta está em uso:

"O Vagrant não pode encaminhar as portas especificadas nesta VM, pois elas colidiriam com algum outro aplicativo que já está escutando nessas portas. A porta encaminhada para 8080 já está em uso na máquina host."

A solução parece bastante simples: eu só preciso identificar o processo que está mantendo a porta 8080 aberta e encerrar esse processo, certo? Não é tão fácil.


Se eu executar o comando:

nmap localhost -p 8080

Eu recebo a seguinte saída:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Se eu executar o seguinte comando:

top -o prt

A porta mais alta em uso em 1360


Se eu executar o seguinte comando:

 netstat -tulpn | grep :8080

Eu recebi:

netstat: n: unknown or uninstrumented protocol

Se eu executar o seguinte comando:

lsof -i :8080

Eu não recebo nenhuma saída


Se eu reiniciar meu computador, a porta estará disponível e eu posso 'vagar'.

Como posso matar qualquer processo que esteja usando a porta 8080 para que eu possa vagrant sem reiniciar meu computador?

Jason Curran
fonte

Respostas:

172

Isso pode ajudar

lsof -n -i4TCP:8080 

O PID é o segundo campo da saída.

Ou tente:

lsof -i -P
Mark Setchell
fonte
Obrigado por tentar, mas declarei em minha pergunta que não recebo nenhuma saída do comando lsof.
Jason Curran
Eu adicionei outra possibilidade.
Mark Setchell
Por acaso você tem uma impressora HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
Mark Setchell
4
Obrigado Mark! Por alguma razão, depois de reiniciar meu computador, os comandos lsof não estavam gerando nada, e agora estão. Agora, todos os 3 dos comandos lsof estão funcionando e posso identificar o id do processo e eliminá-lo com: sudo kill -9 000 ... Onde 000 é o id do processo. O nome do processo é "VBoxHeadless". Se eu receber mais informações sobre o motivo pelo qual não estava funcionando anteriormente, farei um relatório. Para sua informação: não tenho impressora conectada.
Jason Curran
Tente sudo lsof -n -i4TCP:8080selecionar processos pertencentes ao root.
mpelzsherman
99

Solução rápida e rápida:

lsof -n -i4TCP:8080

PIDé o segundo campo. Em seguida, elimine esse processo:

kill -9 PID

Solução menos rápida, mas permanente

  1. Vá para /usr/local/bin/ (pode usar command + shift + g no localizador)

  2. Faça um arquivo chamado stop. Cole o código abaixo nele:

#!/bin/bash
touch temp.text
lsof -n -i4TCP:$1 | awk '{print $2}' > temp.text
pidToStop=`(sed '2q;d' temp.text)`
> temp.text
if [[ -n $pidToStop ]]
then
kill -9 $pidToStop
echo "Congrates!! $1 is stopped."
else
echo "Sorry nothing running on above port"
fi
rm temp.text
  1. Salve este arquivo.
  2. Torne o arquivo executável chmod 755 stop
  3. Agora, vá ao terminal e escreva stop 8888(ou qualquer porta)
ronak kothari
fonte
4
Tentei a solução permanente, mas obtive 'Permissão negada' ao tentar executar o script. Resolvido na primeira execução chmod 755 stop.
nomadoda
35

Caso a resposta aceita acima não funcione, tente a solução abaixo. Você pode usá-lo para a porta 8080 ou para qualquer outra porta.

sudo lsof -i tcp:3000 

Substitua 3000 pela porta que desejar. Execute o comando abaixo para encerrar esse processo.

sudo kill -9 PID

PID é o ID do processo que você deseja eliminar.

Abaixo está a saída dos comandos no Mac Terminal.

Saída de comando

Akshay Thorve
fonte
1
Eu tentaria matar regular (não -9) primeiro. A opção -9 pode fazer com que o soquete não seja fechado corretamente. O processo pode ser eliminado, mas outro ouvinte será bifurcado em seu lugar.
stackPusher
6

Para criar um script:

pid=$(lsof -ti tcp:8080)
if [[ $pid ]]; then
  kill -9 $pid
fi

O -targumento torna a saída de lsof "concisa", o que significa que ele retorna apenas o PID.

voutassauro
fonte
1
você pode fazê-lo funcionar também,
usando
Finalmente uma solução que obtém o PID diretamente. Obrigado cara, deve ser a resposta correta para este tópico
Olympiloutre
3

Eu precisava executar este comando

sudo lsof -i :80 # checks port 8080

Então eu tenho

COMMAND   PID USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
acwebseca 312 root   36u  IPv4 0x34ae935da20560c1      0t0  TCP 192.168.1.3:50585->104.25.53.12:http (ESTABLISHED)

mostrar qual serviço está usando o PID

ps -ef 312

Então eu peguei isso

  UID   PID  PPID   C STIME   TTY           TIME CMD
    0   312    58   0  9:32PM ??         0:02.70 /opt/cisco/anyconnect/bin/acwebsecagent -console

Para desinstalar o agente de segurança da web da Cisco, execute

sudo /opt/cisco/anyconnect/bin/websecurity_uninstall.sh

créditos para: http://tobyaw.livejournal.com/315396.html

Mjabadilla
fonte
3
sudo lsof -i:8080

Ao executar o comando acima, você pode ver quais são as tarefas em execução.

kill -9 <PID Number>

Digite o PID (número de identificação do processo), para encerrar / eliminar a instância.

Viswesvar Sekar
fonte
2

Pode ser Cisco AnyConnect. Verifique se /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist existe. Em seguida, descarregue-o com launchctl e exclua de / Library / LaunchDaemons

Andriy Sylka
fonte
1

Você também pode usar o Activity Monitor para identificar e encerrar o processo usando a porta.

gcmori
fonte
1
Como eu faria isso?
Emil Stenström
No MacOSX: Monitor de Atividade> Rede> classificar por PID> encontre sua porta bloqueada (por exemplo, 8080, 5000 etc)> clique em 'X' superior esquerdo> confirme que deseja sair do processo. Pode ser uma boa ideia editar sua configuração de execução / compilação para garantir que apenas instâncias de servidor únicas possam ser criadas, ou seja, suas portas usadas são liberadas na desmontagem.
Alex Friedmann
1

Execute: nmap -p 8080 localhost(Instale o nmap com MacPorts ou Homebrew se ainda não o tiver em seu sistema)

Relatório de varredura Nmap para localhost (127.0.0.1)

O host está ativo (latência de 0,00034s).

Outros endereços para localhost (não verificado): :: 1

SERVIÇO DE ESTADO PORTUÁRIO

8080 / tcp aberto http-proxy

Corre: ps -ef | grep http-proxy

UID PID PPID C STIME TTY TIME CMD

640 99335 88310 0 12:26 pm ttys002 0: 00.01 grep http-proxy "

Execute: ps -ef 640(substitua 501 pelo seu UID)

/System/Library/PrivateFrameworks/PerformanceAnalysis.framework/Versions/A/XPCServices/com.apple.PerformanceAnalysis.animationperfd.xpc/Contents/MacOS/com.apple.PerformanceAnalysis.animationperfd

A porta 8080 no mac osx é usada por algo instalado com o XCode SDK

Yiling
fonte
1

Use o seguinte comando:

lsof -n -i4TCP:8080 | awk '{print$2}' | xargs kill -9

A identificação do processo da porta 8080 será selecionada e eliminada com força usando kill -9.

Suniti
fonte
1

Eu precisava matar processos em portas diferentes, então criei um script bash:

killPort() {
  PID=$(echo $(lsof -n -i4TCP:$1) | awk 'NR==1{print $11}')
  kill -9 $PID
}

Basta adicionar isso ao seu .bashrc e executá-lo assim:

killPort 8080

Você pode passar qualquer número de porta que desejar

Curt
fonte
0

tente netstat

netstat -vanp tcp | grep 3000

se o seu netstat não suporta -p, use lsof

sudo lsof -i tcp:3000 

Para Centos 7 use

netstat -vanp --tcp | grep 3000
khem raj regmi
fonte