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를 가지고 있다.