Windows에서 포트 8080을 찾고 .BAT 파일을 통해 사용중인 프로세스를 종료하려고 시도 할 수 있습니까?
Windows에서 포트 8080을 찾고 .BAT 파일을 통해 사용중인 프로세스를 종료하려고 시도 할 수 있습니까?
답변:
시작하는 명령은 다음과 같습니다.
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
다른 OS에 대해서는 약간 변경해야 할 수도 있습니다. 예를 들어, 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
그냥 실행하고 찾으십시오. 명령 행 도움말에 따르면, "모든 연결 및 청취 포트를 표시합니다.", "주소 및 포트 번호를 숫자 형식으로 표시합니다."및 "각 연결과 연관된 소유 프로세스 ID를 표시합니다." 다른 사람들이 제안했기 때문에 방금이 옵션을 사용했으며 작동했습니다. :)
^|
첫 번째 명령 또는 프로그램 ( netstat
) 의 출력을 가져 와서 두 번째 명령 프로그램 ( findstr
) 에 전달합니다 . 명령 문자열 대신 명령 줄에서 직접 사용 |
하는 경우 대신을 사용 합니다 ^|
.
findstr :8080
전달 된 모든 출력을 필터링하여을 포함하는 행만 반환합니다 :8080
.
TaskKill.exe /PID <value>
프로세스 ID를 사용하여 실행중인 작업을 종료합니다.
%%P instead of %P
이것은 배치 파일에 필요합니다. 명령 프롬프트에서이 작업을 수행 한 경우 %P
대신 사용 합니다.
HELP FOR
. 커맨드 라인에서 다른 많은 옵션을 FOR
확인 netstat -?
하고 findstr /?
,, 및 TaskKill /?
더 많은 도움 을 받을 수있는 옵션을 확인하십시오 .
tokens=4
내가 생각하는 Windows XP와 tokens=5
Windows 7입니다. 또한 /F
강제로 죽이는 것이 좋습니다 .
명령 프롬프트를 열고 다음 명령을 실행하십시오.
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은 프로세스 ID입니다.
커맨드 라인에서 특정 프로세스를 찾으려면 아래 명령을 사용하십시오 .8080은 프로세스에서 사용하는 포트입니다
netstat -ano | findstr 8080
아래 명령 사용 프로세스를 종료하려면 21424는 프로세스 ID입니다.
taskkill /pid 21424 /F
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
따라서 다음과 같이 findlist에 "LISTENING"을 추가하여이를 제외 할 수 있습니다.
FOR /F "tokens=5 delims= " %%P IN ('netstat -a -n -o ^| findstr :8085.*LISTENING') DO TaskKill.exe /PID %%P
완료를 위해 :
프로세스 수신이 아닌 특정 포트에 연결된 모든 프로세스를 종료하고 싶었습니다.
포트 9001에 대한 명령 (cmd 쉘에서)은 다음과 같습니다.
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| findstr -rc:":9001[ ]*ESTA"') DO TaskKill /F /PID %P
findstr :
netstat :
netstat가 소스 포트, 대상 포트 및 ESTABLISHED를 인쇄하기 때문에 작동합니다.
아래 내용으로 박쥐 파일을 만들면 포트 번호 입력을받습니다.
@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"를 클릭하여 종료하십시오.
포트 8080에서 수신 대기중인 프로세스를 종료하려면 PowerShell을 사용할 수 있습니다. Get-NetTCPConnection
cmdlet 을와 결합하면 됩니다 Stop-Process
.
Windows 10 또는 Windows Server 2016에서 PowerShell 5를 테스트하여 작동해야합니다. 그러나 PowerShell 5가 설치된 이전 Windows 버전에서도 작동해야한다고 생각합니다.
예를 들면 다음과 같습니다.
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"):
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.
)
누군가 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
netstat
도구입니다.
이것을 명령 행에 붙여 넣기
FOR /F "tokens=5 delims= " %P IN ('netstat -ano ^| find "LISTENING" ^| find ":8080 "') DO (TASKKILL /PID %P)
%%P
대신 배치 우레탄으로 사용하려는 경우%P
netstat
도구가 다른 언어로 번역 되었다는 것을
시스템별로 작업을 종료 할 수 없습니다. 이 명령을 시도
x :> 순 정지 http / y