Сценарий Windows, чтобы убить процесс, выполняющийся на порту [duplicate]

Если во время проверки не появляется ошибка MySQL, убедитесь, что вы правильно создали таблицу базы данных. Это случилось со мной. Ищите любые нежелательные запятые или цитаты.

116
задан Premraj 29 October 2015 в 09:17
поделиться

14 ответов

Вот вам команда:

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.

127
ответ дан Merlyn Morgan-Graham 27 August 2018 в 22:44
поделиться

Если вы хотите убить процесс, который прослушивает порт 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"):
0
ответ дан bahrep 27 August 2018 в 22:44
поделиться

Просто для завершения:

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

команда (в оболочке 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

2
ответ дан Boop 27 August 2018 в 22:44
поделиться
3
ответ дан Community 27 August 2018 в 22:44
поделиться

Вставить это в командную строку

FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)

Если вы хотите использовать его в пакетной pu %%P вместо %P

0
ответ дан Eduard Florinescu 27 August 2018 в 22:44
поделиться

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

netstat -ano | findstr 8080

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

taskkill /pid 21424 /F 
49
ответ дан Girdhar Singh Rathore 27 August 2018 в 22:44
поделиться

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

x:> net stop http / y

0
ответ дан Nrawut Phrommahit 27 August 2018 в 22:44
поделиться

Чтобы просмотреть весь процесс, выполняющийся на порту 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

16
ответ дан Sardesh Sharma 27 August 2018 в 22:44
поделиться

Шаги:

  1. Перейдите в папку conf вашего сервера apache tomcat. В моем случае его apache-tomcat-7.0.61\conf, когда я использую apache-tomcat-7.0.61
  2. Откройте server.xml и измените номер порта с 8080 на любой другой порт в соответствии с вашим желанием. Например: 8081,8082,8087 и т. Д.
  3. Теперь перейдите в папку bin и запустите shutdown.bat
  4. Теперь перезапустите сервер через eclipse.

Теперь ваш проект будет работать без прерывания.

0
ответ дан shilovk 27 August 2018 в 22:44
поделиться

Использование решения 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
19
ответ дан Solubris 27 August 2018 в 22:44
поделиться

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

 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 - это идентификатор процесса

186
ответ дан ssc-hrep3 27 August 2018 в 22:44
поделиться

Если кто-то ищет сценарий 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

0
ответ дан watzon 27 August 2018 в 22:44
поделиться

Спасибо всем, просто добавлю, что какой-то процесс не будет закрыт, если переключатель силы / 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 Имя службы

12
ответ дан xtrm 27 August 2018 в 22:44
поделиться

Подобно ответу 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.
)
0
ответ дан Yavin5 27 August 2018 в 22:44
поделиться