본문 바로가기
Today I learned

[Window cmd] 특정 포트를 점유하고있는 프로세스 죽이기.

by soheemon 2019. 9. 4.

로컬에서 개발을 진행할때 톰캣을 올리고 내리는일이 빈번하다.

그런데 톰캣을 내릴때... 포트를 물고있는상태에서 정리되지 않는 경우가 빈번하다.

이런경우에는 톰캣을 올렸을때 포트가 이미 점유중이라는 에러메시지가 발생하게 된다..

 

에러메시지의 내용... 대충 톰캣이 필요한 포트들이 이미 사용중이라는 내용.. 

 

1) 현재 사용중인 포트와 해당 포트를 점유중인 프로세스의 PID를 전부 표시한다.

해당 명령어로 Tomcat의 PID를 알아낸 후에..

netstat -ano

netstat 명령어 실행결과. 설명과 같이 IP:port넘버로 되어있다. 톰캣이 쓰고있는 포트번호를 찾으면 된다.
8080포트를 쓰고있는 톰캣의 PID 는 2532 구나. 

 

2) taskkill 명령어로 해당 프로세스를 죽.여.준.다. 

애초에 깔끔하게 죽어줬으면 이럴일 없잖아. 톰캣아. 우리 서로 번거로운일은 만들지말자.

taskkill /PID ${tomcat의 PID} /F
예) taskkill /PID 5700 /F

착하게도 바로 죽어준다.

taskkill을 하고나서 바로 톰캣을 올리면 바로 안되는 경우도 있어서.. 잠시 기다린후에 톰캣을 올려봅시다..

(간혹 포트는 물고있지만, taskkill을 실행하면 인스턴스가 없다는 에러가 뜰때가 있습니다..

이경우 Tomcat은 포트를 내리고 있는데, 우리가 너무 성급한거일수도 있습니다.)

 

bat파일을 만들어서 클릭 한번으로 톰캣 죽이기

이짓을 여러번하면 슬슬 귀찮아집니다. 모든 개발자가 그렇듯, 어떻게하면 일을 편하게할까 궁리하게 됩니다.

배치파일을 만들어서 더블클릭 한번으로 톰캣을 죽여봅시다.

참고코드: https://de.switch-case.com/65542191

 

.bat파일 만드는법

 

1) notepad를 열어서.. 아래 배치파일 코드를 적어줍니다.

* killport에는 톰캣 포트번호를 적어보세요.

@ECHO OFF
SET killport=8080
for /f "tokens=5" %%p in ('netstat -aon ^| find /i "listening" ^| find "%killport%"') do taskkill /F /PID %%p
pause

+ 코드설명

token=5 : for문을 돌면서 공백을 기준으로 다섯번째 목록에 위치하는 문자열을 가져옵니다.

하낫 둘 셋 넷 다... 아 PID가 다섯번째구나.

netstat -ano 결과를 find로 "listening"하는 목록만을 필터링한후..

그 결과를 8080포트를 가지는 목록만을 가져옵니다.

일치하는 목록을 %%p로 가져와서 taskkill 해줍니다..!

(|가 아닌 ^|를 사용하는 이유는.. for문안이여서 그런듯한데.. 더 찾아봐야 겠다..)

 

2) 저장 > 모든파일 선택 후 파일명에 tomcatKill.bat 를 적어줍니다.

 

 

 

 

 

 

 

 

 

 

 

 

 

 

그리고 문제가 발생할때마다 배치파일을 더블클릭하여 실행해주면 끝!

댓글