개발 중 또는 운영 중에 사용하고 있는 애플리케이션을 강제종료행야 할 때가 있습니다.
개발 중에는 자주 서버를 재시작함할때 가끔 포트 충돌로 실행 되지 경우가 있고,
운영 중에는 배포시 가끔씩 종료가 지연되거나 되지 않을 경우가 종종 있기도 합니다.
이때 활성화한 애플리케이션(또는 서비스) PID를 찾아서 종료하는 방법을 운영체제 별로 확인해 보도록 하겠습니다.
우선 하는 행위는 기본적으로 동일합니다.
- 특정 포트가 열려(사용중)인지 확인한다.
- 사용중인 PID를 확인한다.
- PID를 활용하여 강제 종료한다.
그럼 지금부터 Windows, MacOS, Linux에서 위의 순서를 어떤 명령어로 진행하는지 확인해보세요.
Windows
윈도우의 경우 CMD또는 PowerShell창을 열어 다음 명령어를 입력하여 특정 포트가 사용중인지 확인합니다.
# 형식
netstat -ano [| findstr :PORT]
# 예제
netstat -ano | findstr :8080
위 명령어로 실행되는 결과화면입니다. (헤더는 생략될 수 있음)
프로토콜 로컬 주소 외부 주소 상태 PID
TCP 0.0.0.0:8080 0.0.0.0:0 LISTENING 17360
TCP [::]:8080 [::]:0 LISTENING 17360
결과화면으로 부터 PID를 확인하고 다음 명령어를 실행합니다.
# 형식
taskkill /f /pid PID
# 예제
taskkill /f /pid 17360
다시 netstat를 활용하여 검색해보면 결과화면이 나오지 않을 것입니다.
이는 애플리케이션(서비스)가 종료되었다고 판단하면 됩니다.
"netstat -ano" 명령어만 사용할 경우 수많은 프로세스들이 보여져서 찾기가 힘들 수 있습니다.
이때 "findstr" 명령어를 활용하여 필요한 것만 필터해서 사용할 수 있습니다.
중요한 점은 윈도우에서 서비스를 종료하는 명령어는 "taskkill" 이라는 점입니다.
정리
netstat -ano | findstr :[PORT(8000)]
taskkill /f /pid [PID(11332)]
MacOS
Terminal 창을 열어서 다음 명령어를 입력하여 포트가 사용중인지 확인합니다.
# 형식
lsof -i :[PORT]
# 예제
lsof -i :8080
위 명령어 실행시 다음과 같은 결과화면이 출력됩니다. (헤더는 생략될 수 있음)
COMMAND PID USER FD TYPE DEVICE SIZE/OFF NODE NAME
java 17360 cozy 156u IPv6 0xfd06b486a616f0b3 0t0 TCP *:http (LISTEN)
결과화면으로 부터 PID를 확인하고 다음 명령어를 실행합니다.
# 형식
kill -9 [PID]
# 예제
kill -9 17360
권한이 필요할 경우는 kill 명령어 앞에 sudo와 함게 사용합니다.
sudo kill -9 [PID]
다시 제일 처음 명령어를 입력하시면 결과화면은 나오지 않을 것입니다.
결과화면이 나오지 않으면 애플리케이션(서비스)가 종료되었음을 알 수 있습니다.
정리
lsof -i :[PORT]
kill -9 [PID]
Linux
GUI일 경우 terminal을 열어주시고 ssh 원격일 경우 terminal 상태이므로 다음 명령어를 실행하여 특정 포트가 사용중에 있는지 확인합니다.
# 형식
netstat -tnlp | grep [PORT]
# 예제
netstat -tnlp | grep 8080
다음과 같은 결과화면을 볼 수 있습니다. (헤더는 생략될 수 있음)
Proto Recv-Q Send-Q Local Address Foreign Address State PID/Program name
tcp6 0 0 :::8080 :::* LISTEN 25197/java
결과화면으로부터 PID를 확인한 이후 kill 명령어로 해당 애플리케이션(서비스 or 프로세서)를 종료합니다.
# 형식
kill -9 [PID]
# 예제
kill -9 17360
권한이 필요하다면 kill 명령어 앞에 sudo를 붙혀 root 권한으로 실행합니다.
sudo kill -9 [PID]
다시 열린 포트를 확인하여 검색결과에 이전과 같은 목록이 나오지 않는다면 종료된 것이라 판단합니다.
정리
netstat -tnlp | grep [PORT]
kill -9 [PID]
어느 OS든지 프로세서(서비스)를 강제 종료하는 명령어는 알아두는 것이 좋습니다.
만약 강제 종료하는 명령어를 몰라 OS를 재부팅하는 행위는 안하셨으면 하는 바램이 공유합니다.
'Development > OS' 카테고리의 다른 글
[macOS] macOS에서의 terminal 프롬프트 설정(색상, 폰트 스타일, 정보) (0) | 2024.08.08 |
---|---|
[AWS] CentOS Pair-Key 대신 비밀번호로 변경하는 방법 (0) | 2024.08.02 |
[AWS] 접속하는 방법(putty) (0) | 2024.08.02 |
[WINDOWS] 원격 데스크톱 연결 (0) | 2024.08.02 |
[Ubuntu] 고정 IP 설정하는 방법 (version 16.04 / 18.04 ) (0) | 2020.01.09 |