Как убить процесс в настоящее время, используя порт на локальном хосте в Windows?

Как удалить текущий процесс / приложение, которое уже назначено порту? (Пример:- localhost:8080)

30 ответов

Решение

Шаг 1

Запустите командную строку от имени администратора. Затем выполните приведенную ниже команду упоминания. введите номер вашего порта в yourPortNumber

netstat -ano | findstr:ваш номер порта

Обведенная красным кружком область показывает PID (идентификатор процесса)

Шаг 2

Затем вы выполняете эту команду после определения PID.

тасккилл /PID типа yourPID здесь / F

PS Выполните первую команду еще раз, чтобы проверить, доступен ли процесс или нет. Вы получите пустую строку, если процесс успешно завершен.

Я знаю, что это действительно старый вопрос, но его довольно легко запомнить, быстрая команда для удаления приложения, использующего порт.

Требования: версия npm@5.2.0^

npx kill-port 8080

Вы также можете узнать больше о kill-port здесь: https://www.npmjs.com/package/kill-port

Результат для windows

C:\Users\Niroshan>netstat -ano|findstr "PID :8080"

Proto Local Address Foreign Address State PID
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 18264

taskkill /pid 18264 /f

с инструментами Windows10 по умолчанию:

1.) Найти PID (ProcessID) для порта 8080:

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 LISTEN 11999

2.) Убить процесс зомби:

taskkill /F /PID 11999

где "11999" - ваш PID

Шаг 1 (то же самое в принятом ответе, написанном KavinduWije):

netstat -ano | findstr :yourPortNumber

Измените на шаге 2:

tskill typeyourPIDhere 

Это с taskkill не работает в какой-то команде git bash

Если вы используете GitBash

Первый шаг:

netstat -ano | findstr :8080

Шаг второй:

taskkill /PID typeyourPIDhere /F 

(/F принудительно завершает процесс)

Самое простое решение - единственное, что я могу вспомнить:

В Windows Powershell

Допустим, мы хотим остановить процесс на порту 8080

  1. Получите процесс:
      netstat -ano | findstr :8080
  1. Остановить процесс
      stop-process 82932

Если вы уже знаете номер порта, вероятно, будет достаточно отправить сигнал завершения работы программы (SIGTERM):

kill $(lsof -t -i :PORT_NUMBER)

Для использования в командной строке:

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

У меня работает Simple CMD. Легко вспомнить

найдите номер порта, который вы хотите убить, и запустите команду ниже

      npx kill-port 8080

После завершения порт остановится и появится это сообщение

      npx: installed 3 in 13.796s
Process on port 5555 killed

В Windows PowerShell версии 1 или новее для остановки процесса на порту 3000 введите:

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


Как подсказывает @morganpdx, здесь больше PowerShell-иш, лучшая версия:

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

Откройте командную строку и введите команду ниже

      netstat -ano|findstr "PID :8888"

Вывод покажет идентификатор процесса, занимающего порт

Выполните команду ниже, чтобы убить PID

      taskkill /pid 8912 /f

Вы получите результат, как показано ниже

      SUCCESS: The process with PID 8860 has been terminated.

Если вы можете использовать PowerShell в Windows, вам просто нужно:

Get-Process -Id (Get-NetTCPConnection -LocalPort "8080").OwningProcess | Stop-Process

Для пользователей Windows вы можете использовать инструмент CurrPorts, чтобы легко убивать используемые порты. введите описание изображения здесь

Давайте автоматизируем!

Если вы, как и я, часто сталкиваетесь с этой проблемой, создайте файл .bat и запустите его, чтобы завершить процесс.

создать bat-файл "killport.bat"

      set /P port="Enter port : "
echo showing process running with port %port%

netstat -ano|findstr "PID :%port%"

set /P pid="Enter PID to kill : "

taskkill /pid %pid% /f

set /P exit="Press any key to exit..."

Запустите этот файл, дважды щелкнув и

  1. Введите номер порта (тогда он отобразит процесс с PID)
  2. Введите PID, чтобы убить

Сделанный

(По желанию)

Установите путь к среде, чтобы вы могли получить доступ к этому файлу из любого места.

Скорее всего, вы будете знать, как добавить новый путь в env. Но вот как, если вы этого не сделаете

Шаг 1 из 4

Искать ENV в меню "Пуск"

Шаг 2 из 4

Выберите переменные среды

Шаг 3 из 4

Выберите «путь» и нажмите кнопку «Изменить».

Шаг 4 из 4

Нажмите «Создать» и укажите путь, по которому хранится файл .bat. Поскольку я сохранил его в папке "../Documents/bats", я добавляю этот путь. Ваш путь будет зависеть от того, где вы сохраните этот файл.

Откройте CMD и проверьте. Помните, что ваше имя файла будет словом для запуска этого файла. Поскольку я сохранил файл .bat как «killport.bat» => «killport» - это слово для его запуска.

если вам понравится! еще расскажите, как вы это сделали здесь

Я запускал zookeeper @windows, не смог остановить запуск zookeeper на порте 2181 с помощью zookeeper-stop.sh, поэтому попробовал этот метод двойной косой черты "//" для taskkill. Это сработало

     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.

Запускаем cmd от имени администратора. Затем введите этот код туда.

      netstat -ano | findstr :<8080>

Затем вы можете увидеть, как PID работает на вашем порту. Затем скопируйте этот номер PID. (PID - это уникальный номер, который помогает идентифицировать аппаратный продукт или зарегистрированный программный продукт.) Введите строку кода под строкой и нажмите Enter.

      taskkill /PID <Enter the copied PID Number> /F

Если вы используете Windows Terminal, то процесс уничтожения может быть немного менее утомительным. Я использую терминал 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>

Посмотрите, когда я набрал первую команду для вывода списка процессов на порту, который она вернула пустым. Это означает, что все процессы сейчас убиты.

Если вы используете powershell 7+, это сработало для меня. Просто добавьте эту функцию в свой файл $PROFILE.

      function killport([parameter(mandatory)] [string] $uport){
    if($upid = (Get-NetTCPConnection -LocalPort $uport -ErrorAction Ignore).OwningProcess){kill $upid}
}

или, если вы предпочитаете только команду, вы можете попробовать это:

      kill $(Get-NetTCPConnection -LocalPort 8761 -ErrorAction Ignore).OwningProcess

Вы можете сделать, запустив файл 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

Первый шаг

netstat -vanp tcp | grep 8888

пример

tcp4     0      0    127.0.0.1.8888   *.*    LISTEN      131072 131072  76061    0
tcp46    0      0    *.8888           *.*    LISTEN      131072 131072  50523    0

второй шаг: найдите свои PID и убейте их

в моем случае

sudo kill -9 76061 50523

Если вы хотите сделать это с помощью 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 
netstat -ano | findstr :PORT
kill PI

Однострочное решение с использованием 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

Я использую GitBash, и при запуске я делаю ошибку, как показано ниже.

тасккилл //PID XXXX

ОШИБКА: Не удалось завершить процесс с PID 7420. Причина: этот процесс можно завершить только принудительно (с параметром /F).

Поэтому использовал //F, как показано ниже, и работал нормально

тасккилл //F //PID XXXX

Я написал для этого крошечный скрипт node js. Просто запустите это так: node killPort.js 8080или любой другой порт, который вам нужно убить. Сохраните следующее в killPort.js файл:

      const { exec } = require('child_process');
const fs = require(`fs`);

const port = process.argv.length > 2 ? process.argv[2] : ``;
if (!port || isNaN(port)) console.log(`port is required as an argument and has to be a number`);
else {
    exec(`netstat -ano | findstr :${port}`, (err, stdout, stderr) => {
        if (!stdout) console.log(`nobody listens on port ${port}`);
        else {
            const res = stdout.split(`\n`).map(s => s.trim());
            const pid = res.map(s => s.split(` `).pop()).filter(s => s).pop();
            console.log(`Listener of ${port} is found, its pid is ${pid}, killing it...`);
            exec(`taskkill /PID ${pid} /F`, (err, stdout, stderr) => {
                if (!stdout) console.log(`we tried to kill it, but not sure about the result, please run me again`);
                else console.log(stdout);
            })
        }
    });
}

Я последовал этому ответу: /questions/26315866/kak-ustranit-oshibku-javanetbindexception-adres-uzhe-ispolzuetsya-jvmbind/26315867#26315867

netstat -ano перечислит все прослушиваемые протоколы, порты и процессы.

Вместо этого используйте netstat -plten . Здесь мы находим порт и его pid. Затем мы можем убить этот процесс, набрав

kill -9 pid здесь -9 означает мягкое удаление.

Вот сценарий для этого в WSL2

PIDS=$(cmd.exe /c netstat -ano | cmd.exe /c findstr :$1 | awk '{print $5}')
for pid in $PIDS
do
    cmd.exe /c taskkill /PID $pid /F
done

Этого можно избежать, просто перезапустив IIS с помощью приведенной ниже команды.

IISRESET

Для пользователей Mac: Шаг 1:

ps -ax | grep <port number>

Шаг 2:

sudo kill -9 <Task ID>
Другие вопросы по тегам