Як я можу видалити поточний процес / програму, яка вже призначена порту?
Наприклад: localhost:8080
Як я можу видалити поточний процес / програму, яка вже призначена порту?
Наприклад: localhost:8080
Відповіді:
Крок 1:
Відкрийте cmd.exe (зверніть увагу: вам може знадобитися запустити його як адміністратор, але це не завжди потрібно), а потім запустіть команду нижче:
netstat -ano | findstr :PORT_NUMBER
(Замініть PORT_NUMBER на потрібний номер порту, але збережіть двокрапку)
Область, обведена червоним кольором, показує PID (ідентифікатор процесу). Знайдіть PID процесу, який використовує потрібний порт.
Крок 2:
Далі запустіть таку команду:
taskkill /PID PID /F
(Цього разу немає двокрапки)
Нарешті, ви можете перевірити, чи вдалась операція чи ні, повторно запустивши команду в "Крок 1". Якщо це було успішно, ви не повинні бачити більше результатів пошуку для цього номера порту.
taskkill //PID 12552 //F
taskkill /PID PORT_NUMBER /F
Крок 1 (те саме є у прийнятій відповіді, написаній KavinduWije ):
netstat -ano | findstr :yourPortNumber
Змініть на кроці 2 на:
tskill typeyourPIDhere
Примітка : taskkill
не працює в деякому терміналі git bash
За допомогою інструментів 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
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
-> Тримайте вікно відкритим
Якщо ви використовуєте GitBash
Крок перший:
netstat -ano | findstr :8080
Крок другий:
taskkill /PID typeyourPIDhere /F
( /F
насильно припиняє процес)
У 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,
Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
Для використання в командному рядку:
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
Якщо ви вже знаєте номер порту, ймовірно, достатньо буде надіслати сигнал процесу завершення програмного забезпечення (SIGTERM):
kill $(lsof -t -i :PORT_NUMBER)
lsof -nt -i4TCP:9001
.
Для користувачів Windows, ви можете використовувати інструмент CurrPorts , щоб легко вбивати порти під час використання:
Я запускав 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.
Якщо ви використовуєте термінал Windows, процес убивства може бути менш стомлюючим. Я використовую термінал Windows іkill PID
працює на мене добре, щоб знищити процеси на порту, оскільки новий термінал Windows підтримує певні команди bash. Наприклад:kill 13300
Отже, завершений процес виглядатиме так:
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>
Подивіться, коли я набрав першу команду для переліку процесів на порту, який повернувся порожнім. Це означає, що зараз усі процеси вбиті.
kill
. Я приїду тут, якщо знайду.
Якщо ви хочете зробити це за допомогою 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
Одне рядкове рішення за допомогою 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
Уникнути цього можна простим перезапуском IIS, використовуючи команду нижче:
IISRESET