В Windows можно посмотреть порт 8080 и попытаться убить процесс, который он использует через .BAT файл?
Убейте процесс, просматривая порт, используемый им из .BAT
Ответ 1
Здесь вы можете начать команду:
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= "
Это позволяет вам разделить каждую строку по пробелам и взять четвертый кусок в этой строке и вставить ее в %variable
(в нашем случае %%P
). delims
выглядит пустым, но дополнительное пространство действительно значимо.
netstat -a -n -o
Просто запустите его и узнайте. В соответствии с командной консолью "Отображает все подключения и порты прослушивания". "Отображает адреса и номера портов в числовой форме" и "Отображает идентификатор процесса владения, связанный с каждым соединением". Я просто использовал эти параметры, так как кто-то предложил это, и это случилось с работой:)
^|
Это выводит результат первой команды или программы (netstat
) и передает ее во вторую командную программу (findstr
). Если вы использовали это непосредственно в командной строке, а не внутри командной строки, вы использовали бы |
вместо ^|
.
findstr :8080
Это фильтрует любой вывод, который передается в него, возвращая только строки, содержащие :8080
.
TaskKill.exe /PID <value>
Это убивает запущенную задачу, используя идентификатор процесса.
%%P instead of %P
Это требуется в пакетных файлах. Если вы сделали это в командной строке, вместо этого вы бы использовали %P
.
Ответ 2
Откройте командную строку и запустите следующие команды
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 - это идентификатор процесса
Ответ 3
Чтобы найти конкретный процесс в командной строке, используйте ниже команду здесь 8080 - это порт, используемый процессом
netstat -ano | findstr 8080
чтобы убить процесс использования ниже команды здесь 21424 - это идентификатор процесса
taskkill /pid 21424 /F
Ответ 4
Использование решения Merlyn привело к тому, что другие приложения были убиты, как 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
Ответ 5
Чтобы перечислить весь процесс, выполняющийся на порту 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
Ответ 6
Спасибо всем, просто добавьте, что какой-то процесс не будет закрыт, если только переключатель /F force также не отправляется с 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
Ответ 7
Посмотрите, какой процесс прослушивает порт: Как узнать, какой процесс прослушивает порт в Windows?
Убейте его: Любой способ записать Windows файл .bat для уничтожения процессов?
Ответ 8
Только для завершения:
Я хотел убить все процессы, подключенные к определенному порту, но не процесс прослушивания
команда (в оболочке 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 → all
- n → не разрешать (быстрее)
- o → pid
Это работает, потому что netstat выводит исходный порт, а затем порт назначения, а затем ESTABLISHED
Ответ 9
Если вы хотите убить процесс прослушивания на порту 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"):
Ответ 10
Создан 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" для выхода.
Ответ 11
Подобно реакции Merlyn, но это также обрабатывает эти случаи:
- Номер порта фактически является левой подстрокой другого более длинного порта номер, который вы не ищете. Вы хотите найти точный номер порта, чтобы вы не убивали случайный, невинный процесс!
- Код script должен иметь возможность запускать более одного раза и быть правильным каждый раз, не отображая старые, неверные ответы.
Вот он:
set serverPid=
for /F "tokens=5 delims= " %%P in ('netstat -a -n -o ^| findstr /E :8080 ') do set serverPid=%%P
if not "%serverPid%" == "" (
taskkill /PID %serverPid%
) else (
rem echo Server is not running.
)
Ответ 12
Шаги:
-
Перейдите в папку
conf
вашего сервера apache tomcat. В моем случае, егоapache-tomcat-7.0.61\conf
, поскольку я использую apache-tomcat-7.0.61 -
Откройте
server.xml
и измените номер порта с 8080 на любой другой порт по вашему желанию. Например: 8081,8082,8087 и т.д. -
Теперь перейдите в папку
bin
и запуститеshutdown.bat
-
Теперь перезапустите сервер через eclipse.
Теперь ваш проект будет работать без прерывания.
Ответ 13
Если кто-то ищет Powershell Script:
function Search-And-Destroy
{
param ( [Parameter(Mandatory=$true)][string]$port )
$lines = netstat -a -o -n | findstr $port
$ports = @()
ForEach($line In $lines)
{
$res = $($lines -split '\s+')
$ports += $res[5]
}
$ports = $ports | select -uniq
ForEach($port In $ports)
{
echo $(taskkill /F /PID $port)
}
}
Эта функция в основном выполняет то, что выполняет вышеуказанные функции, но она находится в формате сценариев Powershell, поэтому вы можете добавить ее в свой профиль Powershell. Чтобы найти местоположение вашего профиля, перейдите в "PowerShell" и введите echo $profile
Ответ 14
Вставьте это в командную строку
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
Если вы хотите использовать его в пакете pu %%P
вместо %P
Ответ 15
если вы по системе, вы не можете закончить задачу. попробуйте эту команду
х:> чистый стоп http/y