Znajdź (i zabij) Port blokujący proces 3000 na komputerze Mac

Jak znaleźć procesy, które nasłuchują / używają moich portów tcp? Jestem na mac os x.

Czasami, po awarii lub jakimś błędzie, moja aplikacja rails blokuje port 3000. Nie mogę go znaleźć używając ps-ef... Jak znaleźć tę głupią rzecz i zabić ją, brutalnie... ?

Podczas wykonywania

rails server

I get

Adres jest już używany - bind (2) (Errno::EADDRINUSE)

2014 Aktualizacja:

Aby uzupełnić niektóre z poniższych odpowiedzi: po wykonaniu poleceń kill, usunięcie pliku pid może być konieczne rm ~/mypath/myrailsapp/tmp/pids/server.pid

 1143
Author: Soviut, 2010-10-04

26 answers

  1. Możesz spróbować netstat

    netstat -vanp tcp | grep 3000
    
  2. Dla macOS El Capitan i nowszych (lub jeśli twój netstat nie obsługuje -p), Użyj lsof

    sudo lsof -i tcp:3000 
    
  3. Dla Centos 7 użyj

    netstat -vanp --tcp | grep 3000
    
 1875
Author: ghostdog74,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 14:56:42

Znajdź:

[sudo] lsof -i :3000

Kill:

kill -9 <PID>
 1240
Author: Filip Spiridonov,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-06-13 03:50:10

Nic powyżej nie zadziałało. Każdy inny z moim doświadczeniem może spróbować następujących (pracował dla mnie):

Run:

lsof -i :3000 (where 3000 is your current port in use)

Następnie sprawdź status zgłaszanego PID:

ps ax | grep <PID>

Wreszcie "Precz z tym":

kill -QUIT <PID>
 106
Author: Austin,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-10-25 05:45:11

Jednowierszowy do wyodrębniania PID procesu za pomocą portu 3000 i zabijania go.

lsof -ti:3000 | xargs kill

Flaga-t usuwa z wyjścia lsof wszystko oprócz PID, co ułatwia jego zabicie.

 87
Author: Zlemini,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-08-05 21:03:38

Możesz użyć lsof -i:3000.

To jest "lista otwartych plików". Daje to listę procesów oraz plików i portów, których używają.

 85
Author: DerMike,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-01 01:23:34

W Twoim .bash_profile Utwórz skrót dla terminate procesu 3000:

terminate(){
  lsof -P | grep ':3000' | awk '{print $2}' | xargs kill -9 
}

Następnie, zadzwoń $terminate jeśli jest zablokowany.

 50
Author: alexzg,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2013-07-26 01:20:24

Aby skutecznie zabić taki proces, użyj następującego polecenia

lsof -n -i4TCP:3000 

Gdzie 3000 jest numerem portu, na którym Proces jest uruchomiony

Zwraca identyfikator procesu (PID) and run

kill -9 "PID"

Zastąp PID numerem otrzymanym po uruchomieniu pierwszego polecenia

Na przykład, jeśli chcę zabić proces działający na porcie 8080

 47
Author: tadtab,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-20 05:57:40
lsof -P | grep ':3000' | awk '{print $2}'

To daje tylko pid, przetestowane na MacOS.

 34
Author: Kris,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2012-08-03 21:14:00

Jednym ze sposobów zabicia procesu na porcie jest użycie biblioteki Pythona: freeport (https://pypi.python.org/pypi/freeport/0.1.9 ). Po zainstalowaniu po prostu:

# install freeport
pip install freeport

# Once freeport is installed, use it as follows
$ freeport 3000
Port 3000 is free. Process 16130 killed successfully
 26
Author: YBathia,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-07-25 22:59:08

Wykonaj w wierszu poleceń na OS-X El Captain:

kill -kill `lsof -t -i tcp:3000`

Terse opcja lsof zwraca tylko PID.

 24
Author: JE42,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-06-23 18:15:09

Ten pojedynczy wiersz poleceń jest łatwy do zapamiętania:

npx kill-port 3000

Dla potężniejszego narzędzia z wyszukiwaniem:

npx fkill-cli


PS: używają zewnętrznych pakietów javascript

Źródła: tweet | github

 23
Author: Bruno Lemos,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-07-18 16:25:30

Znajdź otwarte połączenie

Lsof - i-P / grep-I "listen"

Kill by process ID

Kill -9 ' PID '

 22
Author: Sourabh Bhagat,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2016-07-17 11:10:19

Możliwe sposoby, aby to osiągnąć:

Top

Top command to tradycyjny sposób przeglądania wykorzystania zasobów systemu i sprawdzania procesów, które zajmują najwięcej zasobów systemowych. Top wyświetla listę procesów, z tymi, które używają najwięcej procesora na górze.

Ps

Polecenie ps wyświetla listę uruchomionych procesów. Poniższe polecenie wyświetla listę wszystkich procesów uruchomionych w Twoim systemie:

ps -A

Możesz również przepuścić wyjście przez grep wyszukuje określony proces bez użycia innych poleceń. Następujące polecenie wyszukuje proces Firefoksa:

ps -A | grep firefox

Najczęstszym sposobem przekazywania sygnałów do programu jest polecenie kill.

kill PID_of_target_process

Lsof

Lista wszystkich otwartych plików i procesów, które je otworzyły.

lsof -i -P | grep -i "listen"
kill -9 PID

Lub

 lsof -i tcp:3000 
 12
Author: smooth,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-01-29 11:34:06

Dodaj do ~/.bash_profile:

function killTcpListen () {
  kill -QUIT $(sudo lsof -sTCP:LISTEN -i tcp:$1 -t)
}

Then source ~/.bash_profile and run

killTcpListen 8080

 5
Author: rofrol,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-03-31 12:17:58

Używając narzędzia sindresorhus ' S fkill, możesz to zrobić:

$ fkill :3000
 5
Author: Kodie Grantham,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-04-18 18:31:38

Znajdź i zabij:

Ten pojedynczy wiersz poleceń jest łatwy i działa poprawnie.

kill -9 $(lsof -ti tcp:3000)
 5
Author: Dylan Breugne,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-28 06:26:13

Aby wyświetlić procesy blokujące port:

netstat -vanp tcp | grep 3000

Aby zabić procesy blokujące port:

kill $(lsof -t -i :3000)

 5
Author: Henry,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-12 04:36:01

TL; DR:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill

Jeśli znajdujesz się w sytuacji, w której są zarówno klienci jak i serwery korzystające z portu, np.:

$ lsof -i tcp:3000
COMMAND     PID         USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
node       2043 benjiegillam   21u  IPv4 0xb1b4330c68e5ad61      0t0  TCP localhost:3000->localhost:52557 (ESTABLISHED)
node       2043 benjiegillam   22u  IPv4 0xb1b4330c8d393021      0t0  TCP localhost:3000->localhost:52344 (ESTABLISHED)
node       2043 benjiegillam   25u  IPv4 0xb1b4330c8eaf16c1      0t0  TCP localhost:3000 (LISTEN)
Google    99004 benjiegillam  125u  IPv4 0xb1b4330c8bb05021      0t0  TCP localhost:52557->localhost:3000 (ESTABLISHED)
Google    99004 benjiegillam  216u  IPv4 0xb1b4330c8e5ea6c1      0t0  TCP localhost:52344->localhost:3000 (ESTABLISHED)
Więc prawdopodobnie nie chcesz zabić obu.

W tej sytuacji możesz użyć -sTCP:LISTEN, aby pokazać tylko pid procesów, które nasłuchują. Łącząc to z formatem-t terse możesz automatycznie zabić proces:

lsof -ti tcp:3000 -sTCP:LISTEN | xargs kill
 3
Author: Benjie,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-05-08 16:17:11

Zrobiłem dla tego małą funkcję, dodaj ją do pliku rc(.bashrc, .zshrc lub cokolwiek)

function kill-by-port {
  if [ "$1" != "" ]
  then
    kill -9 $(lsof -ni tcp:"$1" | awk 'FNR==2{print $2}')
  else
    echo "Missing argument! Usage: kill-by-port $PORT"
  fi
}

Następnie możesz po prostu wpisać kill-by-port 3000, aby zabić serwer rails (zastępując 3000 dla dowolnego portu, na którym działa)

Jeśli tego nie zrobisz, zawsze możesz wpisać kill -9 $(cat tmp/pids/server.pid) z głównego katalogu rails

 3
Author: Caleb Keene,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-06-20 03:26:01

Powinieneś spróbować, ta technika jest niezależna od systemu operacyjnego.

Po stronie Twojej aplikacji znajduje się folder o nazwie tmp, wewnątrz którego znajduje się inny folder o nazwie pids. Ten plik zawiera plik PID serwera. Po prostu usuń ten plik. port automatycznie się zabija.

Myślę, że to jest łatwy sposób.

 1
Author: Arun P,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-12 14:02:11

Oto helper Bash funkcja do zabijania wielu procesów przez nazwę lub port

fkill() {
  for i in $@;do export q=$i;if [[ $i == :* ]];then lsof -i$i|sed -n '1!p';
  else ps aux|grep -i $i|grep -v grep;fi|awk '{print $2}'|\
  xargs -I@ sh -c 'kill -9 @&&printf "X %s->%s\n" $q @';done
}

Użycie:

$ fkill [process name] [process port]

Przykład:

$ fkill someapp :8080 node :3333 :9000
 1
Author: Miguel Mota,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-08-30 19:51:53

Możesz użyć polecenia

lsof -h

Użycie tego polecenia do znalezienia portu to

-i i   select by IPv[46] address: [46][proto][@host|addr][:svc_list|port_list]

W Twoim przypadku wpisz

lsof -i :3000
 0
Author: Amarjit Singh,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-29 17:55:19

Jeśli nic z powyższych nie działa spróbuj:

lsof -n -i4TCP:3000
 0
Author: QuakeCore,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-03 10:02:50

Krok 1: Znajdź serwer, który działa: ps aux | grep puma Krok 2: Zabij serwer Kill -9 [numer serwera]

 0
Author: Thiện Nguyễn,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-08 08:45:38

Możesz również zmienić konfigurację na porcie serwera (config / puma.rb) linia 12.

$ port ENV.fetch ("PORT") {3000 }

Do

$ port ENV.fetch ("PORT") {3001 }

Lub jakikolwiek konkretny port, który uznasz za odpowiedni. pozwala to uniknąć konieczności polowania na zamiatacze procesów. zawsze możesz ponownie uruchomić komputer. również gdy zainicjujesz serwer na innym porcie, Zwykle zabije on pierwszy otwarty serwer.

 0
Author: Ron,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2018-09-23 17:34:21

Powinieneś wypróbować ten kod używając terminala:

$ killall -9 ruby
 -5
Author: shakeel rauf,
Warning: date(): Invalid date.timezone value 'Europe/Kyiv', we selected the timezone 'UTC' for now. in /var/www/agent_stack/data/www/doraprojects.net/template/agent.layouts/content.php on line 54
2017-10-30 08:41:59