본문 바로가기

Linux

lsof : list open files (kill 명령어로 중복 포트 없애기)

위의 명령어를 사용해본 계기

 

VSCode를 사용하면서 run으로 해당 프로그램을 실행하던 중에 터미널에서 ERROR [NestApplication] Error: listen EADDRINUSE: address already in use :::3000 +1ms 라는 에러가 발생하였다.


이에 관한 해결방법을 찾다보니, Mac이나 Linux에서는 lsof(list open files)를 활용하여 kill의 sign을 주는 방법이 있다고 한다. 

 

lsof 

시스템에 열린 파일 목록을 알려주고 사용하는 프로세스, 디바이스 정보, 파일의 종류 등 상세한 정보를 출력해주는 명령어

> Mac Terminal에서 해당 명령어를 입력하면 아래와 같은 결과가 출력된다. (회사컴이라 열에 대한 정보들은 기재하지 않았다) 

 

Node.js를 사용하고 있을 경우 Command 부분에는 node라고 적혀있다. (Nest.js는 Node.js 기반이다) 

COMMAND  PID    USER   FD   TYPE DEVICE SIZE/OFF NODE NAME 
각 열에 맞는 정보들 출력

 위의 오류는 3000번 포트를 어디선가 또 쓰고 있어 3000번 포트가 중복되고 있는 상황이므로, 

lsof를 이용하여 3000번 포트를 사용하고 있는 PID를 찾고, 해당 PID를 kill 시켜줘야 한다. 


과정 

Linux는 정말 띄어쓰기에 민감한 것 같다. 아래의 예시를 보자. 

 

잘못된 예시 

sudo lsof -i : 3000

실행결과 

lsof: unacceptable port specification in: -i :

 

 

올바른 예시 

sudo lsof -i :3000

실행결과 

COMMAND  PID        USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
해당 정보들 출력~

잘못된 예시의 경우 -i : 3000이고, 올바른 예시의 경우 -i :3000 이었는데, 띄어쓰기 하나로 Linux에서 실행결과가 확연하게 달라지는 것을 확인할 수 있었다. 

 


kill 명령어로 중복 port 없애기 

kill -9 "해당 PID번호"