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?

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

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)

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


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.


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


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


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.


1

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


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


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.


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
Korzystając z naszej strony potwierdzasz, że przeczytałeś(-aś) i rozumiesz nasze zasady używania plików cookie i zasady ochrony prywatności.
Licensed under cc by-sa 3.0 with attribution required.