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
26 answers
-
Możesz spróbować
netstat
netstat -vanp tcp | grep 3000
-
Dla macOS El Capitan i nowszych (lub jeśli twój netstat nie obsługuje
-p
), Użyjlsof
sudo lsof -i tcp:3000
-
Dla Centos 7 użyj
netstat -vanp --tcp | grep 3000
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>
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>
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.
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ą.
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.
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
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.
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
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.
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
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 '
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
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
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
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)
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)
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
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
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.
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
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
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
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]
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.
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
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