Jak mogę zabić jakikolwiek proces używający portu 8080, abym mógł się włóczyć w górę?

93

Na MacOSX używam Packera do budowy Vagranta, więc muszę go ciągle podnosić i burzyć. Próbuję `` wędrować w górę '' i otrzymuję standardowy błąd, ponieważ port jest używany:

„Vagrant nie może przekazywać określonych portów na tej maszynie wirtualnej, ponieważ kolidowałyby one z inną aplikacją, która już nasłuchuje na tych portach. Przekierowany port do 8080 jest już używany na maszynie hosta”.

Rozwiązanie wydaje się dość proste: po prostu muszę zidentyfikować proces, który utrzymuje otwarty port 8080 i zabić ten proces, prawda? To nie jest takie proste.


Jeśli uruchomię polecenie:

nmap localhost -p 8080

Otrzymuję następujący wynik:

PORT     STATE SERVICE
8080/tcp open  http-proxy

Jeśli uruchomię następujące polecenie:

top -o prt

Najwyższy używany port w 1360 roku


Jeśli uruchomię następujące polecenie:

 netstat -tulpn | grep :8080

Otrzymałem:

netstat: n: unknown or uninstrumented protocol

Jeśli uruchomię następujące polecenie:

lsof -i :8080

Nie otrzymuję żadnego wyjścia


Jeśli ponownie uruchomię komputer, port jest teraz dostępny i mogę teraz „wędrować”.

Jak mogę zabić dowolny proces używający portu 8080, aby móc wędrować bez ponownego uruchamiania komputera?

Jason Curran
źródło

Odpowiedzi:

164

To może pomóc

lsof -n -i4TCP:8080 

PID to drugie pole w danych wyjściowych.

Lub spróbuj:

lsof -i -P
Mark Setchell
źródło
Dziękuję za próbę, ale stwierdziłem w moim pytaniu, że nie otrzymuję danych wyjściowych z polecenia lsof.
Jason Curran
Dodałem inną możliwość.
Mark Setchell
Czy masz drukarkę HP LaserJet? blog.hgomez.net/blog/2010/09/25/…
Mark Setchell
3
Dzięki Mark! Z jakiegoś powodu po ponownym uruchomieniu komputera polecenia lsof nic nie wyświetlały, a teraz są. Teraz wszystkie 3 z poleceń lsof działają i mogę zidentyfikować identyfikator procesu i zabić go: sudo kill -9 000 ... Gdzie 000 to identyfikator procesu. Nazwa procesu to „VBoxHeadless”. Jeśli otrzymam więcej informacji o tym, dlaczego wcześniej nie działało, odpowiem. FYI: Nie mam podłączonej drukarki.
Jason Curran
Spróbuj sudo lsof -n -i4TCP:8080odebrać procesy należące do roota.
mpelzsherman
90

Szybkie i szybkie rozwiązanie:

lsof -n -i4TCP:8080

PIDto drugie pole. Następnie zakończ ten proces:

kill -9 PID

Mniej szybkie, ale trwałe rozwiązanie

  1. Idź do /usr/local/bin/ (można użyć polecenia + shift + g w wyszukiwarce)

  2. Utwórz plik o nazwie stop. Wklej w nim poniższy kod:

#!/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. Zapisz ten plik.
  2. Spraw, aby plik był wykonywalny chmod 755 stop
  3. Teraz przejdź do terminala i napisz stop 8888(lub dowolny port)
ronak kothari
źródło
4
Wypróbowałem trwałe rozwiązanie, ale podczas próby uruchomienia skryptu otrzymałem komunikat „Odmowa uprawnień”. Rozwiązany przez pierwsze uruchomienie chmod 755 stop.
nomadoda
32

Jeśli powyższa odpowiedź nie zadziała, wypróbuj poniższe rozwiązanie. Możesz go użyć dla portu 8080 lub dowolnego innego portu.

sudo lsof -i tcp:3000 

Zastąp 3000 dowolnym portem, który chcesz. Uruchom poniższe polecenie, aby zabić ten proces.

sudo kill -9 PID

PID to identyfikator procesu, który chcesz zabić.

Poniżej znajduje się wyjście poleceń w terminalu Mac.

Wyjście polecenia

Akshay Thorve
źródło
1
spróbuję najpierw zwykłego zabicia (nie -9). Opcja -9 może spowodować, że gniazdo nie zostanie poprawnie zamknięte. Proces może zostać zabity, ale w jego miejsce rozwidli się inny słuchacz.
stackPusher
6

Aby to napisać:

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

-tArgument ma wyjście lsof „lakoniczny”, co oznacza, że tylko ona zwraca PID.

voutasaurus
źródło
1
możesz sprawić, by działał też, który
pobierze
Wreszcie rozwiązanie, które bezpośrednio pobiera PID. Dzięki stary, powinna być poprawną odpowiedzią na ten wątek
Olympiloutre
3

Musiałem uruchomić to polecenie

sudo lsof -i :80 # checks port 8080

Wtedy dostałem

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)

pokaż, która usługa używa PID

ps -ef 312

Wtedy dostałem to

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

Aby odinstalować agenta bezpieczeństwa WWW Cisco, uruchom

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

kredyty na: http://tobyaw.livejournal.com/315396.html

mjabadilla
źródło
2

Może to być Cisco AnyConnect. Sprawdź, czy istnieje /Library/LaunchDaemons/com.cisco.anyconnect.vpnagentd.plist. Następnie wyładuj go za pomocą launchctl i usuń z / Library / LaunchDaemons

Andriy Sylka
źródło
2
sudo lsof -i:8080

Uruchamiając powyższe polecenie, możesz zobaczyć, jakie są uruchomione wszystkie zadania.

kill -9 <PID Number>

Wprowadź PID (numer identyfikacyjny procesu), co spowoduje zakończenie / zabicie instancji.

Viswesvar Sekar
źródło
1

Możesz również użyć Monitora aktywności, aby zidentyfikować i zakończyć proces przy użyciu portu.

gcmori
źródło
1
Jak miałbym to zrobić?
Emil Stenström
W systemie MacOSX: Monitor aktywności> Sieć> sortuj według PID> znajdź zablokowany port (np. 8080, 5000 itp.)> Kliknij lewy górny „X”> potwierdź, że chcesz zakończyć proces. Dobrym pomysłem może być zmodyfikowanie konfiguracji uruchamiania / kompilacji, aby mieć pewność, że można tworzyć tylko pojedyncze instancje serwera, tj. Używane porty są zwalniane po rozebraniu.
Alex Friedmann
1

Uruchom: nmap -p 8080 localhost(zainstaluj nmap z MacPorts lub Homebrew, jeśli jeszcze go nie masz w systemie)

Raport skanowania Nmapa dla hosta lokalnego (127.0.0.1)

Host działa (opóźnienie 0,00034 s).

Inne adresy hosta lokalnego (nie skanowane): :: 1

OBSŁUGA PAŃSTWA PORTU

8080 / tcp otwarty serwer proxy http

Biegać: ps -ef | grep http-proxy

UID PID PPID C CZAS CZASU CZAS CMD

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

Uruchom: ps -ef 640(zamień 501 na swój UID)

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

Port 8080 na Mac OSX jest używany przez coś zainstalowanego z XCode SDK

Yiling
źródło
1

Użyj następującego polecenia:

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

Identyfikator procesu portu 8080 zostanie wybrany i zabity siłą przy użyciu kill -9.

Suniti
źródło
0

spróbuj netstat

netstat -vanp tcp | grep 3000

jeśli twój netstat nie obsługuje -p, użyj lsof

sudo lsof -i tcp:3000 

Do użytku z Centos 7

netstat -vanp --tcp | grep 3000
khem raj regmi
źródło