[windows] .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대신 사용 합니다.


답변

명령 프롬프트를 열고 다음 명령을 실행하십시오.

 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를 인쇄하기 때문에 작동합니다.