Node.js

[node] listen EADDRINUSE: address already in use :::3000 - window

슈크림 붕어빵 2023. 12. 15. 17:15

문제 

코드 수정 후, 사용하던 포트를 닫고 새로 열려고 할 때 이미 사용중이라는 에러가 발생함.

 

원인

해당 포트가 다른 프로세스에서 사용중이기거나 Node.js 프로세스가 비정상적으로 종료된 경우 나타남.

code runner를 사용해서 포트를 연결하고 서버를 열고 닫았는데 닫히기 전에 여는 등 비정상적인 경우에 나타난 듯 하다.

 

해결방법 - window

 

1. 다음 명령어로 해당 포트를 사용하고 있는 pid알아내기

netstat -ano

=>모든 포트에 대한 정보

netstat -ano | findstr :3000

=>포트 3000을 사용하는 정보만 보여줌.

마지막 17116이 pid이다. 이를 이용해서 작업관리자에서 해당 포트를 사용하는 프로세스를 작업끝내기를 하면 된다.

 

2.1) 터미널에서 해당 프로세스 끝내기

 

원격 프로세스는 f를 추가해줘야한다고 한다.

taskkill /pid 'pid번호' /f

 

 

2.2) 작업관리자에서 해당 프로세스 끝내기

 

 

참고 정보

프로그램이란? 

  • 명령어 리스트를 내용으로 가진 디스크에 저장된 파일(실행 파일이라고 불린다.)과 같은 수동적인 존재이다.

프로세스란?

  • 실행중인 프로그램, cpu에서 실행되는 모든 프로그램을 말한다. 다음에 실행할 명령어를 지정하는 프로그램 카운터와 관련 자원의 집합을 가진 능동적인 존재이다.
  • 하나의 프로세스는 하나 이상의 스레드를 가진다

스레드란 (thread) ?

  • 정의: 스레드는 어떠한 프로그램 내에서, 특히 프로세스 내에서 실행되는 흐름의 단위를 말한다.
  • 프로그램은 하나의 작업만 하는 경우는 거의 없다.=> 프로세스 내에서 여러가지 일을 수행하기 위해 필요한 것이 스레드이다.

프로세스 vs 스레드

  • 스레드: CPU 입장에서의 최소 작업 단위가 된다. CPU는 작업을 처리할 때 스레드를 최소 단위로 삼고 작업을 한다.
  • 프로세스: 반면 운영체제는 이렇게 작은 단위까지 직접 작업하지 않기 때문에 운영체제 관점에서는 프로세스가 최소 작업 단위가 된다.

pid란?

  • 각 프로세스마다 고유 번호인 프로세스id, 즉 pid를 가지고 있다.