Jak mogę usunąć bieżący proces / aplikację, która jest już przypisana do portu?
Na przykład: localhost:8080
Jak mogę usunąć bieżący proces / aplikację, która jest już przypisana do portu?
Na przykład: localhost:8080
Odpowiedzi:
Krok 1:
Otwórz program cmd.exe (uwaga: może być konieczne uruchomienie go jako administrator, ale nie zawsze jest to konieczne), a następnie uruchom poniższe polecenie:
netstat -ano | findstr :PORT_NUMBER
(Zamień PORT_NUMBER na żądany numer portu, ale zachowaj dwukropek)
Obszar zaznaczony na czerwono pokazuje PID (identyfikator procesu). Znajdź PID procesu korzystającego z żądanego portu.
Krok 2:
Następnie uruchom następujące polecenie:
taskkill /PID PID /F
(Tym razem nie ma dwukropka)
Na koniec możesz sprawdzić, czy operacja zakończyła się powodzeniem, ponownie uruchamiając polecenie w „kroku 1”. Jeśli się powiedzie, nie powinieneś widzieć więcej wyników wyszukiwania dla tego numeru portu.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
Krok 1 (to samo dotyczy zaakceptowanej odpowiedzi napisanej przez KavinduWije ):
netstat -ano | findstr :yourPortNumber
Zmień w kroku 2 na:
tskill typeyourPIDhere
Uwaga : taskkill
nie działa w niektórych terminalach git bash
W przypadku domyślnych narzędzi systemu Windows 10:
Otwórz program Windows PowerShell jako administrator
Znajdź PID (ProcessID) dla portu 8080:
netstat -aon | findstr 8080
TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 77777
Zabij proces zombie:
taskkill /f /pid 77777
gdzie „77777” jest Twoim PID
set /p port="Enter port: "
-> Port wejściowy FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine
:SkipLine
-> Wyodrębnia PID do zmiennej taskkill /f /pid %ProcessId%
-> Zabija zadanie cmd /k
-> Nie zamykaj okna
Jeśli używasz GitBash
Krok pierwszy:
netstat -ano | findstr :8080
Krok drugi:
taskkill /PID typeyourPIDhere /F
( /F
wymusza zakończenie procesu)
W Windows PowerShell w wersji 1 lub nowszej, aby zatrzymać proces na porcie 3000:
Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force
Jak sugeruje @morganpdx tutaj jest więcej PowerShell-ish, lepsza wersja:
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force
'Stop-Process' is not recognized as an internal or external command,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
Do użytku w wierszu poleceń:
for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a
Do użytku w pliku bat:
for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a
Jeśli znasz już numer portu, prawdopodobnie wystarczy wysłać sygnał zakończenia oprogramowania do procesu (SIGTERM):
kill $(lsof -t -i :PORT_NUMBER)
lsof -nt -i4TCP:9001
samo.
Użytkownicy systemu Windows mogą skorzystać z narzędzia CurrPorts , aby łatwo zabić używane porty:
Pracowałem w Zookeeper w systemie Windows i nie byłem w stanie zatrzymać ZooKeeper działającego na porcie 2181 przy użyciu zookeeper-stop.sh, więc wypróbowałem metodę podwójnego ukośnika „//” w celu wykonania zadania. Zadziałało
1. netstat -ano | findstr :2181
TCP 0.0.0.0:2181 0.0.0.0:0 LISTENING 8876
TCP [::]:2181 [::]:0 LISTENING 8876
2.taskkill //PID 8876 //F
SUCCESS: The process with PID 8876 has been terminated.
Jeśli używasz terminala Windows, proces zabijania może być nieco mniej uciążliwy. Korzystam z terminala systemu Windows i kill PID
działa dla mnie dobrze, aby zabijać procesy na porcie, ponieważ nowy terminal systemu Windows obsługuje niektóre polecenia bash. Na przykład:kill 13300
Cały proces będzie wyglądał następująco:
netstat -ano | findstr :PORT
kill PID
Na przykład:
PS C:\Users\username> netstat -ano | findstr :4445
TCP 0.0.0.0:4445 0.0.0.0:0 LISTENING 7368
TCP [::]:4445 [::]:0 LISTENING 7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>
Zobacz, kiedy wpisałem pierwsze polecenie, aby wyświetlić listę procesów na porcie, który zwrócił pusty. Oznacza to, że wszystkie procesy są teraz zabijane.
kill
. Złożę post tutaj, jeśli znajdę.
Jeśli chcesz to zrobić za pomocą Pythona: sprawdź Czy w Pythonie można zabić proces nasłuchujący na określonym porcie, na przykład 8080?
Odpowiedź Smunka działa dobrze. Powtarzam jego kod tutaj:
from psutil import process_iter
from signal import SIGTERM # or SIGKILL
for proc in process_iter():
for conns in proc.connections(kind='inet'):
if conns.laddr.port == 8080:
proc.send_signal(SIGTERM) # or SIGKILL
continue
Jedno liniowe rozwiązanie korzystające z GitBash :
tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`
Zamień 8080 na port, którego nasłuchuje serwer.
Jeśli musisz go często używać, spróbuj dodać do swojej ~/.bashrc
funkcji:
function killport() {
tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}
i po prostu biegnij
killport 8080
Możemy tego uniknąć, po prostu ponownie uruchamiając IIS, używając poniższego polecenia:
IISRESET