Windows의 localhost에서 현재 포트를 사용하는 프로세스를 어떻게 종료합니까?


491

이미 포트에 할당 된 현재 프로세스 / 응용 프로그램을 제거하려면 어떻게해야합니까?

예를 들면 다음과 같습니다. localhost:8080

답변:


1056

1 단계:

cmd.exe를 엽니 다 (참고 : 당신이 할 수 관리자 권한으로 실행해야하지만이 항상 필요하지 않습니다), 다음 명령 아래의 실행

netstat -ano | findstr :PORT_NUMBER

(PORT_NUMBER를 원하는 포트 번호로 바꾸고 콜론을 유지하십시오)

빨간색 원으로 표시된 영역은 PID (프로세스 식별자)를 나타냅니다. 원하는 포트를 사용하는 프로세스의 PID를 찾으십시오.

2 단계:

다음 명령을 실행하십시오.

taskkill /PID PID /F

(이번에는 결장 없음)

마지막으로 "1 단계"의 명령을 다시 실행하여 작업의 성공 여부를 확인할 수 있습니다. 성공한 경우 해당 포트 번호에 대한 검색 결과가 더 이상 표시되지 않습니다.


작동하지 않는. 여전히 프로세스가 표시됩니다
Hardik Mandankaa

16
완벽하게 작동합니다. 필자의 경우 Tomcat이 포트 8080에서 실행 중이므로 Spring 앱을 다시 시작해야했습니다. i.imgur.com/aVwSYvR.png 정말 감사합니다.
휴고 LM

16
taskkill을 실행할 때 이스케이프 문자를 입력해야했습니다.taskkill //PID 12552 //F
Robert

1
허용 된 답변은 실패시 다시 시작하도록 설정된 서비스에 대해 작동하지 않습니다 (Linux가 아님)
nurettin

1
난 당신이 PID_NUMBER하지 PORT_NUMBER을 의미 생각taskkill /PID PORT_NUMBER /F
마르신 쿨릭

132

1 단계 (동일한 허용에 대답KavinduWije ) :

netstat -ano | findstr :yourPortNumber

2 단계에서 다음으로 변경하십시오.

tskill typeyourPIDhere 

참고 : taskkill일부 git bash 터미널에서 작동하지 않습니다


1
나를 위해 그것을 찾을 수 didnt는
Tzvi 그레고리 카이다 노브

1
@TzviGregoryKaidanov 무슨 문제가 있습니까?
afsarkhan10182

1
고맙습니다, 그것은 taskkill을 tskill로 변경함으로써 작동했습니다
Md Shoaib Alam

1
이것은 나를 위해 일한 솔루션입니다. GIT Bash를 사용하고 있습니다.
dxhans5

1
첫 번째 명령의 출력을 seond로 전달 하여이 작업을 수행 할 수 있습니까?
James

115

Windows 10 기본 도구를 사용하는 경우 :

  • 1 단계 :

관리자 권한으로 Windows PowerShell 열기

  • 2 단계 :

포트 8080에 대한 PID (ProcessID)를 찾으십시오.

netstat -aon | findstr 8080

TCP 0.0.0.0:8080 0.0.0.0:0 듣기 77777

  • 3 단계 :

좀비 프로세스를 종료하십시오.

taskkill /f /pid 77777

여기서 "77777"은 PID입니다.


1
cmd 출력을보고 수동으로 새 명령을 작성할 가능성이 없다면 프로세스를 자동화 하고이 두 명령을 하나의 bat 파일로 결합하는 방법은 무엇입니까?
Serob_b

3
@Serob_b- set /p port="Enter port: "> 입력 포트 FOR /F "tokens=5" %%T IN ('netstat -aon ^| findstr %port% ') DO ( SET /A ProcessId=%%T) &GOTO SkipLine :SkipLine-> PID를 변수로 추출 taskkill /f /pid %ProcessId%-> 작업 종료 cmd /k -> 창을 열린 상태로 유지
Vikrant

94

GitBash를 사용하는 경우

1 단계 :

netstat -ano | findstr :8080

2 단계 :

taskkill /PID typeyourPIDhere /F 

( /F강제적으로 프로세스를 종료)


이중 슬래시가 나를 위해 작동하지
않았다

2
@ kylexy1357은 단일 슬래시로 시도하십시오. 은 "이중 슬래시"는 /, 일부 포탄에 필요하지 않은 앞에 이스케이프 문자이다
로버트

27

에서 의 Windows PowerShell의 버전 1 이상은 포트 3000 유형의 프로세스를 중지합니다 :

중지 프로세스 (, (netstat -ano | findstr : 3000) .split () | foreach {$ [$ .length-1]})-강제


@morganpdx가 제안한 것처럼 여기에는 PowerShell이 ​​더 좋고 더 나은 버전이 있습니다.

중지 프로세스 -Id (Get-NetTCPConnection -LocalPort 3000) .OwningProcess -Force


'Stop-Process' is not recognized as an internal or external command,
Green

3
나는 이것이 작동한다는 것을 Stop-Process -Id (Get-NetTCPConnection -LocalPort 3000).OwningProcess -Force
알았다

1
@Green Windows PowerShell에서 명령을 실행해야합니다
todorm

1
첫 번째 오류가 발생했습니다. seconf가 저를 위해 일했습니다
Tom

24

명령 행에서 사용하기 위해 :

for /f "tokens=5" %a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %a

박쥐 파일에 사용 :

for /f "tokens=5" %%a in ('netstat -aon ^| find ":8080" ^| find "LISTENING"') do taskkill /f /pid %%a

1
당신은 박쥐에 그것을 위해 %% % a를 교체하려는 경우
마헤 Narwade

23

이미 포트 번호를 알고 있다면 소프트웨어 종료 신호를 프로세스 (SIGTERM)로 보내면 충분할 것입니다.

kill $(lsof -t -i :PORT_NUMBER)

포트가 IPv4를 사용하고 있다는 것을 알고 있다면 할 수도 lsof -nt -i4TCP:9001있습니다.
Josh Habdas


10

Windows에서 zookeeper를 실행 중이었고 zookeeper-stop.sh를 사용하여 2181 포트에서 ZooKeeper 실행 을 중지 할 수 없었 으므로이 이중 슬래시 "//"방법을 taskkill에 시도했습니다. 그것은 효과가 있었다

     1. netstat -ano | findstr :2181
       TCP    0.0.0.0:2181           0.0.0.0:0              LISTENING       8876
       TCP    [::]:2181              [::]:0                 LISTENING       8876

     2.taskkill //PID 8876 //F
       SUCCESS: The process with PID 8876 has been terminated.

6

당신이 사용하는 경우 Windows 터미널을 다음 죽이는 과정은 좀 덜 지루한 수 있습니다. 나는 터미널 창을 사용하고 kill PID새로운 Windows 터미널 특정 bash는 명령을 지원하는 나를 포트에서 프로세스를 종료하는 작품 잘. 예를 들면 다음과 같습니다.kill 13300

따라서 전체 프로세스는 다음과 같습니다.

  • Windows 터미널 열기
  • 프로세스를 종료하려는 포트에서 실행중인 프로세스를 표시하려면 다음 명령을 입력하십시오. netstat -ano | findstr :PORT
  • 프로세스를 종료하려면 다음을 입력하십시오. kill PID

예를 들어 :

PS C:\Users\username> netstat -ano | findstr :4445
  TCP    0.0.0.0:4445           0.0.0.0:0              LISTENING       7368
  TCP    [::]:4445              [::]:0                 LISTENING       7368
PS C:\Users\username> kill 7368
PS C:\Users\username> netstat -ano | findstr :4445
PS C:\Users\username>

비어있는 포트에서 프로세스를 나열하기 위해 첫 번째 명령을 입력 한시기를 참조하십시오. 즉, 모든 프로세스가 이제 종료되었습니다.


나는 그것을 테스트했기 때문에 이것이 효과가 있다는 것을 알고있다. 나는 그 주위의 문서를 찾으려고 노력하고있다.
DanStarns

@ DanStarns, 나는 지금까지 이것을 발견했습니다! docs.microsoft.com/en-us/windows/terminal
lazycipher

시간 내 주셔서 감사합니다. 찾고있는 페이지가 아닙니다 kill. 터미널에 제공되는 모든 기능이있는 페이지입니다 . 내가 찾으면 여기에 게시하겠습니다.
DanStarns

1
현재로서는 이것에 대해 많이 찾지 못했습니다. 무언가를 찾으면 게시하십시오.
lazycipher

4

박쥐 파일을 실행하면됩니다 :

@ECHO OFF                                                                              
FOR /F "tokens=5" %%T IN ('netstat -a -n -o ^| findstr "9797" ') DO (
SET /A ProcessId=%%T) &GOTO SkipLine                                                   
:SkipLine                                                                              
echo ProcessId to kill = %ProcessId%
taskkill /f /pid %ProcessId%
PAUSE

4

Python을 사용하여 수행하려는 경우 : check Python 에서 특정 포트에서 수신 대기중인 프로세스 (예 : 8080)를 종료 할 수 있습니까?

Smunk 의 대답은 훌륭하게 작동합니다. 나는 그의 코드를 여기에서 반복한다.

from psutil import process_iter
from signal import SIGTERM # or SIGKILL

for proc in process_iter():
    for conns in proc.connections(kind='inet'):
        if conns.laddr.port == 8080:
            proc.send_signal(SIGTERM) # or SIGKILL
            continue

이것은 Google Cloud에서 특정 포트 번호를 사용하는 소켓에서도 작동했습니다! 고마워요
peevesy

0

GitBash를 사용하는 한 줄 솔루션 :

 tskill `netstat -ano | grep LISTENING | findstr :8080 | sed -r 's/(\s+[^\s]+){4}(.*)/\1/'`

교체 8080 을 서버가 수신하는 포트로 .

자주 사용해야하는 경우 ~/.bashrc함수에 추가하십시오 .

function killport() {
        tskill `netstat -ano | findstr LISTENING | findstr :$1 | sed -r 's/^(\s+[^\s]+){4}(\d*)$/\1/'`
}

간단하게 실행

killport 8080

-1

아래 명령을 사용하여 IIS를 간단히 다시 시작하면이 문제를 피할 수 있습니다.

IISRESET
당사 사이트를 사용함과 동시에 당사의 쿠키 정책개인정보 보호정책을 읽고 이해하였음을 인정하는 것으로 간주합니다.
Licensed under cc by-sa 3.0 with attribution required.