Если во время проверки не появляется ошибка MySQL, убедитесь, что вы правильно создали таблицу базы данных. Это случилось со мной. Ищите любые нежелательные запятые или цитаты.
Вот вам команда:
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
.
Если вы хотите убить процесс, который прослушивает порт 8080, вы можете использовать PowerShell. Просто скомбинируйте командлет Get-NetTCPConnection
с Stop-Process
.
Протестировано и должно работать с PowerShell 5 на Windows 10 или Windows Server 2016. Однако I предположим, что он также должен работать на более старых версиях 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"):
Просто для завершения:
Я хотел убить все процессы, подключенные к определенному порту, но не процесс прослушивания
команда (в оболочке cmd) для порта 9001:
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr:
netstat:
Это работает, потому что netstat выводит исходный порт, а затем порт назначения, а затем ESTABLISHED
Посмотрите, какой процесс прослушивает порт: Как узнать, какой процесс прослушивает порт в Windows?
Убить его: Любой способ написать файл .bat Windows для уничтожения процессов?
Вставить это в командную строку
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
Если вы хотите использовать его в пакетной pu %%P
вместо %P
Чтобы найти конкретный процесс в командной строке, используйте ниже команду здесь 8080 - это порт, используемый процессом
netstat -ano | findstr 8080
, чтобы убить использование процесса ниже здесь. 21424 - это идентификатор процесса
taskkill /pid 21424 /F
если вы по системе вы не можете закончить задачу. попробуйте эту команду
x:> net stop http / y
Чтобы просмотреть весь процесс, выполняющийся на порту 8080, выполните следующие действия.
netstat -ano | найдите «8080»
blockquote>TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 10612 TCP [::]:8080 [::]:0 LISTENING 10612
Затем, чтобы убить процесс, выполните следующую команду:
taskkill / F / PID 10612
blockquote >
Шаги:
conf
вашего сервера apache tomcat. В моем случае его apache-tomcat-7.0.61\conf
, когда я использую apache-tomcat-7.0.61 server.xml
и измените номер порта с 8080 на любой другой порт в соответствии с вашим желанием. Например: 8081,8082,8087 и т. Д. bin
и запустите shutdown.bat
Теперь ваш проект будет работать без прерывания.
Использование решения 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 следующим образом: / g2]
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
Откройте командную строку и запустите следующие команды
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 - это идентификатор процесса
Если кто-то ищет сценарий Powershell:
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
Спасибо всем, просто добавлю, что какой-то процесс не будет закрыт, если переключатель силы / F также не будет отправлен с TaskKill. Также с переключателем / T все вторичные потоки процесса будут закрыты.
blockquote>C:\>FOR /F "tokens=5 delims= " %P IN ('netstat -a -n -o ^| findstr :2002') DO TaskKill.exe /PID %P /T /F
Для служб необходимо будет получить имя службы и выполнить:
sc stop Имя службы
blockquote>
Подобно ответу Merlyn, но это также относится к этим случаям:
Вот он:
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.
)