특정 포트가 사용중이라는 에러가 발생한다면? (killport)

coderH·2023년 1월 28일
0

로컬 서버를 띄우거나 라이브 서버를 실행할 때 3000, 8080과 같은 특정 포트를 이용하게 되는데 종종 알 수 없는 에러로 인해 사용하지 않고 있는데도 해당 포트가 이미 사용중이라는 에러메세지를 띄우는 걸 경험해보신 분이 있을텐데요.

포트 사용중 에러

그래서 오늘은 특정 포트가 현재 활성화되어 있는지 확인하는 방법과 이러한 문제를 어떻게 해결해야 하는지 알아보겠습니다.

사용중인 포트를 확인하는 방법

윈도우의 경우 터미널이나 PowerShell에서 netstat이라는 명령어를 통해 현재 사용중인 혹은 열려있는 포트의 리스트를 확인할 수 있습니다.

또한, netstat 명령어는 다음과 같은 옵션을 받을 수 있습니다.

옵션설명
-aTCP 연결이 활성화되어있는 포트 및 수신 대기중인 TCP와 UDP 포트를 표시
-o활성화된 TCP연결에 PID를 포함한 결과값을 표시
-sTCP, UDP, ICMP, IP와 같은 프로토콜별 통계를 표시
-rIP 라우팅 표 컨텐츠를 표시하며 route print 명령어와 같다.
-p 활성화된 목록 중 명시된 프로토콜에 해당하는 목록만 표시
-n이름이 아닌 IP주소와 포트번호로만 활성화된 목록을 표시
/?도움말

netstat 명령어만 실행 할 경우 다음과 같은 결과값이 표시됩니다.

netstat 명령어 실행결과

여기서 상태 영역은 해당 TCP 프로토콜의 상태를 말하며 상태는 다음과 같은 종류로 이루어져 있습니다.

상태설명
LISTEN포트가 열려 있으며 외부 TCP 서버로부터 연결 요청을 기다리는 상태
ESTABLISHED클라이언트와 서버가 연결되어 있는 상태로 데이터 전송과정에서는 정상을 뜻함.
TIME_WAIT외부 서버가 연결 종료 요청을 승인 받았는지 확인하기 위해 기다리는 상태
CLOSE_WAIT외부 서버로부터 종료 요청을 받은 뒤 로컬 애플리케이션의 연결 종료 명령을 기다리는 상태
CLOSED연결이 종료된 상태

특정 포트를 강제로 죽이는 방법

이제 포트를 찾았으니 해당 포트를 사용중인 프로세스를 강제로 종료해야겠죠?

위에서 배운 netstat 명령어에 a와 o옵션을 주어서 해당 포트를 사용중인 프로세스를 찾아보겠습니다.

저의 경우, 현재 5511포트를 통해 라이브 서버를 실행하고 있기 때문에 결과값에서 5511포트를 찾으면 됩니다.

netstat 명령어 실행 결과

보면 이렇게 해당 포트는 13340이라는 PID를 가진 프로세스가 사용하고 있다고 나옵니다.

그럼 cmd에서 프로세스 종료 명령어인 taskkill이라는 명령어에 강제하는 옵션인 -f와 PID를 명시하겠다는 옵션인 -pid를 입력해 강제로 종료해보겠습니다.

프로세스 종료 성공 메세지

위와 같이 성공 표시가 나온 뒤 기존에 활성화시켜놨던 페이지를 새로고침하면 더이상 접근하지 못하는것을 볼 수 있습니다.

연결이 끊긴 모습

출처

IBM Docs

netstat | Microsoft

taskkill | Microsoft

0개의 댓글