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 : taskkillnie 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
( /Fwymusza 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:9001samo.
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 PIDdział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 :PORTkill PIDNa 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 ~/.bashrcfunkcji:
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