로컬 서버를 띄우거나 라이브 서버를 실행할 때 3000
, 8080
과 같은 특정 포트를 이용하게 되는데 종종 알 수 없는 에러로 인해 사용하지 않고 있는데도 해당 포트가 이미 사용중이라는 에러메세지를 띄우는 걸 경험해보신 분이 있을텐데요.
그래서 오늘은 특정 포트가 현재 활성화되어 있는지 확인하는 방법과 이러한 문제를 어떻게 해결해야 하는지 알아보겠습니다.
윈도우의 경우 터미널이나 PowerShell에서 netstat
이라는 명령어를 통해 현재 사용중인 혹은 열려있는 포트의 리스트를 확인할 수 있습니다.
또한, netstat
명령어는 다음과 같은 옵션을 받을 수 있습니다.
옵션 | 설명 |
---|---|
-a | TCP 연결이 활성화되어있는 포트 및 수신 대기중인 TCP와 UDP 포트를 표시 |
-o | 활성화된 TCP연결에 PID를 포함한 결과값을 표시 |
-s | TCP, UDP, ICMP, IP와 같은 프로토콜별 통계를 표시 |
-r | IP 라우팅 표 컨텐츠를 표시하며 route print 명령어와 같다. |
-p | 활성화된 목록 중 명시된 프로토콜에 해당하는 목록만 표시 |
-n | 이름이 아닌 IP주소와 포트번호로만 활성화된 목록을 표시 |
/? | 도움말 |
netstat
명령어만 실행 할 경우 다음과 같은 결과값이 표시됩니다.
여기서 상태 영역은 해당 TCP 프로토콜의 상태를 말하며 상태는 다음과 같은 종류로 이루어져 있습니다.
상태 | 설명 |
---|---|
LISTEN | 포트가 열려 있으며 외부 TCP 서버로부터 연결 요청을 기다리는 상태 |
ESTABLISHED | 클라이언트와 서버가 연결되어 있는 상태로 데이터 전송과정에서는 정상을 뜻함. |
TIME_WAIT | 외부 서버가 연결 종료 요청을 승인 받았는지 확인하기 위해 기다리는 상태 |
CLOSE_WAIT | 외부 서버로부터 종료 요청을 받은 뒤 로컬 애플리케이션의 연결 종료 명령을 기다리는 상태 |
CLOSED | 연결이 종료된 상태 |
이제 포트를 찾았으니 해당 포트를 사용중인 프로세스를 강제로 종료해야겠죠?
위에서 배운 netstat
명령어에 a와 o옵션을 주어서 해당 포트를 사용중인 프로세스를 찾아보겠습니다.
저의 경우, 현재 5511
포트를 통해 라이브 서버를 실행하고 있기 때문에 결과값에서 5511
포트를 찾으면 됩니다.
보면 이렇게 해당 포트는 13340
이라는 PID를 가진 프로세스가 사용하고 있다고 나옵니다.
그럼 cmd에서 프로세스 종료 명령어인 taskkill
이라는 명령어에 강제하는 옵션인 -f
와 PID를 명시하겠다는 옵션인 -pid
를 입력해 강제로 종료해보겠습니다.
위와 같이 성공 표시가 나온 뒤 기존에 활성화시켜놨던 페이지를 새로고침하면 더이상 접근하지 못하는것을 볼 수 있습니다.