Убейте процесс, посмотрев используемый им порт из .BAT - PullRequest
118 голосов
/ 01 июня 2011

В Windows, что может искать порт 8080 и пытаться завершить процесс, который он использует, через файл .BAT?

Ответы [ 15 ]

192 голосов
/ 08 июня 2015

Откройте командную строку и выполните следующие команды

 C:\Users\username>netstat -o -n -a | findstr 0.0:3000
   TCP    0.0.0.0:3000      0.0.0.0:0              LISTENING       3116

C:\Users\username>taskkill /F /PID 3116

, здесь 3116 - идентификатор процесса

135 голосов
/ 01 июня 2011

Вот команда, с которой можно начать:

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO @ECHO TaskKill.exe /PID %%P

Если вы уверены в своем пакетном файле, удалите @ECHO.

FOR /F "tokens=4 delims= " %%P IN ('netstat -a -n -o ^| findstr :8080') DO TaskKill.exe /PID %%P

Обратите внимание, что вам может понадобитьсяизмените это немного для разных ОС.Например, в Windows 7 вам может потребоваться tokens=5 вместо tokens=4.

Как это работает

FOR /F ... %variable IN ('command') DO otherCommand %variable...

Это позволяет вам выполнить command,и цикл по выходным данным.Каждая строка будет вставлена ​​в %variable и может быть расширена в otherCommand столько раз, сколько вы хотите, где вам угодно.%variable при фактическом использовании может иметь только однобуквенное имя, например, %V.

"tokens=4 delims= "

Это позволяет разделить каждую строку на пробел, взять 4-й фрагмент в этой строке и заполнитьэто в %variable (в нашем случае, %%P).delims выглядит пустым, но это дополнительное пространство на самом деле важно.

netstat -a -n -o

Просто запустите его и узнайте.Согласно справке командной строки, она «Отображает все подключения и прослушивающие порты», «Отображает адреса и номера портов в числовой форме.» И «Отображает идентификатор процесса-владельца, связанный с каждым подключением».Я просто использовал эти опции, так как кто-то еще предложил это, и это сработало:)

^|

Это берет выходные данные первой команды или программы (netstat) и передает их во вторую командную программу(findstr).Если бы вы использовали это непосредственно в командной строке, а не внутри командной строки, вы бы использовали | вместо ^|.

findstr :8080

Это фильтрует все выходные данные, которые передаются в него, возвращаятолько строки, содержащие :8080.

TaskKill.exe /PID <value>

Это убивает запущенную задачу, используя идентификатор процесса.

%%P instead of %P

Это требуется в пакетных файлах.Если бы вы сделали это в командной строке, вы бы использовали %P вместо.

51 голосов
/ 17 января 2017

Чтобы найти конкретный процесс в командной строке, используйте приведенную ниже команду, здесь 8080 - это порт, используемый процессом

netstat -ano | findstr 8080

, чтобы убить процесс, используйте приведенную ниже команду, здесь 21424 - это идентификатор процесса

taskkill /pid 21424 /F 
19 голосов
/ 17 декабря 2013

Использование решения Мерлина привело к тому, что другие приложения были убиты, как firefox. Эти процессы использовали один и тот же порт, но не как прослушиватель:

например:

netstat -a -n -o | findstr :8085
  TCP    0.0.0.0:8085           0.0.0.0:0              LISTENING       6568
  TCP    127.0.0.1:49616        127.0.0.1:8085         TIME_WAIT       0
  TCP    127.0.0.1:49618        127.0.0.1:8085         TIME_WAIT       0

Следовательно, можно исключить их, добавив «LISTENING» в findstr следующим образом:

FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
16 голосов
/ 19 мая 2017

Чтобы просмотреть список всех процессов, запущенных на порту 8080, выполните следующие действия.

netstat -ano | найти "8080"

TCP    0.0.0.0:8080           0.0.0.0:0              LISTENING       10612

TCP    [::]:8080              [::]:0                 LISTENING       10612

Затем для завершения процесса выполните следующую команду

Taskkill / F / PID 10612

13 голосов
/ 19 ноября 2012

Спасибо всем, просто чтобы добавить, что некоторые процессы не будут закрываться, если ключ / F не будет также отправлен с TaskKill.Также с ключом / T все вторичные потоки процесса будут закрыты.

C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^|
 findstr :2002') DO TaskKill.exe /PID %P /T /F

Для сервисов необходимо получить имя сервиса и выполнить:

sc stop ServiceName

3 голосов
/ 01 июня 2011
2 голосов
/ 01 июля 2014

Только для завершения:

Я хотел убить все процессы, подключенные к определенному порту, но не процесс, прослушивающий

команда (в оболочке cmd) для порта 9001:

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P

Findstr

  • r - для выражений, а c - для точной цепочки соответствия.
  • [] * для соответствующих пробелов

NetStat

  • a -> все
  • n -> не разрешать (быстрее)
  • o -> pid

Это работает, потому что netstat распечатывает порт источника, затем порт назначения и затем УСТАНАВЛИВАЕТСЯ

1 голос
/ 01 апреля 2019

Создан bat-файл с указанным ниже содержимым, он принимает ввод для номера порта

@ECHO ON
set /p portid=Enter the Port to be killed: 
echo %portid%                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr %portid% ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

Наконец, нажмите «Enter» для выхода.

1 голос
/ 02 ноября 2016

Если вы хотите завершить процесс, прослушивающий порт 8080, вы можете использовать PowerShell. Просто объедините командлет Get-NetTCPConnection с Stop-Process.

Протестировано и должно работать с PowerShell 5 в Windows 10 или Windows Server 2016. Однако я полагаю, что оно также должно работать в старых версиях Windows, в которых установлен PowerShell 5.

Вот пример:

PS C:\> Stop-Process -Id (Get-NetTCPConnection -LocalPort 8080).OwningProcess

Confirm
Are you sure you want to perform the Stop-Process operation on the following item: MyTestServer(9408)?
[Y] Yes  [A] Yes to All  [N] No  [L] No to All  [S] Suspend  [?] Help (default is "Y"):
...