Як я вбиваю процес, який наразі використовується порт у localhost в Windows?


Відповіді:


1056

Крок 1:

Відкрийте cmd.exe (зверніть увагу: вам може знадобитися запустити його як адміністратор, але це не завжди потрібно), а потім запустіть команду нижче:

netstat -ano | findstr :PORT_NUMBER

(Замініть PORT_NUMBER на потрібний номер порту, але збережіть двокрапку)

Область, обведена червоним кольором, показує PID (ідентифікатор процесу). Знайдіть PID процесу, який використовує потрібний порт.

Крок 2:

Далі запустіть таку команду:

taskkill /PID PID /F

(Цього разу немає двокрапки)

Нарешті, ви можете перевірити, чи вдалась операція чи ні, повторно запустивши команду в "Крок 1". Якщо це було успішно, ви не повинні бачити більше результатів пошуку для цього номера порту.


не працює. все ще відображається процес
Hardik Mandankaa

16
Працює ідеально. У моєму випадку Tomcat працював у порту 8080, і мені потрібно було знову запустити свою програму Spring. i.imgur.com/aVwSYvR.png Дуже дякую.
Гюго Л.М.

16
Мені довелося вводити втечу персонажів під час виконання завдання:taskkill //PID 12552 //F
Роберт

1
прийнята відповідь не працюватиме для служб, створених для перезавантаження при відмові (це не Linux)
nurettin

1
я думаю, ти мав на увазі PID_NUMBER, а не PORT_NUMBER уtaskkill /PID PORT_NUMBER /F
Marcin Kulik

132

Крок 1 (те саме є у прийнятій відповіді, написаній KavinduWije ):

netstat -ano | findstr :yourPortNumber

Змініть на кроці 2 на:

tskill typeyourPIDhere 

Примітка : taskkillне працює в деякому терміналі git bash


1
не знайшов для мене
Цві Григорій Кайданов

1
@TzviGregoryKaidanov, з яким питанням ви стикаєтесь?
afsarkhan10182

1
дякую, він працював, змінивши taskkill на tskill
Md

1
Це рішення, яке працювало на мене. Я використовую GIT Bash.
dxhans5

1
Чи можна це зробити, передавши висновок першої команди в seond?
Джеймс

115

За допомогою інструментів Windows 10 за замовчуванням:

  • Крок перший:

Відкрийте Windows PowerShell як адміністратор

  • Крок другий:

Знайти PID (ProcessID) для порту 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0grees LISTEN 77777

  • Крок третій:

Вбийте процес зомбі:

taskkill /f /pid 77777

де "77777" - ваш PID


1
Як автоматизувати процес і об'єднати ці дві команди разом в одному файлі bat, якщо немає можливості переглянути вихід CMD, а потім написати нову команду вручну?
Serob_b

3
@Serob_b set /p port="Enter port: "-> Порт введення FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> Витягує PID у змінну taskkill /f /pid %ProcessId%-> Вбиває завдання cmd /k -> Тримайте вікно відкритим
Vikrant

94

Якщо ви використовуєте GitBash

Крок перший:

netstat -ano | findstr :8080

Крок другий:

taskkill /PID typeyourPIDhere /F 

( /Fнасильно припиняє процес)


подвійний
різаний не

2
@ kylexy1357 спробуйте з однією косою рисою. "Подвійний косий рядок" - це символ втечі, який передує /, який не потрібен для деяких снарядів
Роберт

27

У Windows PowerShell версії 1 або пізнішої для зупинки процесу на порту 3000 введіть:

Stop-Process (, (netstat -ano | findstr: 3000) .split () | foreach {$ [$ .length-1]}) -Force


Як запропонував @morganpdx, тут "більше PowerShell-ish, краща версія:

Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force


'Stop-Process' is not recognized as an internal or external command,
Зелений

3
Я вважаю, що це працює:Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
morganpdx,

1
@Green Ви повинні запустити команду в Windows PowerShell
todorm

1
Перша одна помилка, для мене працював seconf
Том,

24

Для використання в командному рядку:

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

Для використання у bat-файлі:

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a

1
Якщо ви хочете зробити це в .bat, замініть% a на %% a
Mahesh Narwade

23

Якщо ви вже знаєте номер порту, ймовірно, достатньо буде надіслати сигнал процесу завершення програмного забезпечення (SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)

Якщо ви знаєте, що порт використовує IPv4, ви можете зробити і це lsof -nt -i4TCP:9001.
Джош Хабдас

10

Для користувачів Windows, ви можете використовувати інструмент CurrPorts , щоб легко вбивати порти під час використання:

Введіть тут опис зображення


10

Я запускав zookeeper в Windows і не зміг зупинити роботу ZooKeeper на порту 2181 за допомогою zookeeper-stop.sh, тому спробував цей метод "//" подвійної косої риски для завдання. Це спрацювало

     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.

6

Якщо ви використовуєте термінал Windows, процес убивства може бути менш стомлюючим. Я використовую термінал Windows іkill PID працює на мене добре, щоб знищити процеси на порту, оскільки новий термінал Windows підтримує певні команди bash. Наприклад:kill 13300

Отже, завершений процес виглядатиме так:

  • Відкрийте термінал Windows
  • Введіть наступну команду, щоб показати процеси, що працюють на порту, який ви хочете знищити. netstat -ano | findstr :PORT
  • Введіть наступне, щоб вбити процес. kill PID

Наприклад:

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>

Подивіться, коли я набрав першу команду для переліку процесів на порту, який повернувся порожнім. Це означає, що зараз усі процеси вбиті.


Я знаю, що це працює, тому що я його протестував, я намагаюся знайти документацію навколо нього, чи є у вас?
DanStarns

@DanStarns, я досі знайшов лише це! docs.microsoft.com/en-us/windows/terminal
lazycipher

Дякую за ваш час, це не зовсім сторінка, яку я шукаю, сторінка з усіма функціями, що надаються в терміналі, наприклад kill. Я приїду тут, якщо знайду.
DanStarns

1
На сьогодні я мало що про це дізнався. Будь ласка, напишіть, якщо ви знайдете що-небудь.
лінивець

4

Ви можете запустити файл bat:

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

4

Якщо ви хочете зробити це за допомогою Python: перевірте Чи можливо в python вбити процес, який слухається на певному порту, наприклад 8080?

Відповідь від Smunk прекрасно працює. Я повторюю його код тут:

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

Це працювало для сокета, який також використовує певний номер порту в Google Cloud! Дякую тонну
peevesy

0

Одне рядкове рішення за допомогою GitBash :

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

Замініть 8080 портом, який слухає ваш сервер.

Якщо вам потрібно часто користуватися нею, спробуйте додати до своєї ~/.bashrcфункції:

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

і просто бігати

killport 8080

-1

Уникнути цього можна простим перезапуском IIS, використовуючи команду нижче:

IISRESET
Використовуючи наш веб-сайт, ви визнаєте, що прочитали та зрозуміли наші Політику щодо файлів cookie та Політику конфіденційності.
Licensed under cc by-sa 3.0 with attribution required.