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
대신 사용 합니다.
답변
명령 프롬프트를 열고 다음 명령을 실행하십시오.
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
답변
포트 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
답변
/ 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
답변
완료를 위해 :
프로세스 수신이 아닌 특정 포트에 연결된 모든 프로세스를 종료하고 싶었습니다.
포트 9001에 대한 명령 (cmd 쉘에서)은 다음과 같습니다.
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가 소스 포트, 대상 포트 및 ESTABLISHED를 인쇄하기 때문에 작동합니다.