1. PID (프로세스 ID) 찾기
2. 프로세스 종료시키기
2-1) `9` KILL 시그널 주의사항
2-2) default 시그널 `15` TERM
스프링 부트로 웹 애플리케이션을 로컬에서 실행시켰을 때 다음과 같은 에러가 발생할 때가 있습니다.
저의 경우에는 IntelliJ IDEA가 오류로 혼자 종료되었는데, tomcat 프로세스는 죽지 않고 살아있어서 발생하였습니다.
두 가지 unix 명령어를 기록할 겸 간단한 포스팅 남겨봅니다.
1. PID (프로세스 ID) 찾기
lsof -i :포트번호
- [lsof] : "List Open Files"의 약자이며, 파일이나 네트워크 연결 등 시스템에서 열려 있는 모든 '파일'에 대한 정보를 제공합니다.
- [-i] : 네트워크 인터페이스 옵션입니다. 이 옵션을 사용하면 네트워크 연결에 관련된 파일만 필터링하여 볼 수 있습니다.
- [:포트번호] : 이 부분에 특정 포트 번호를 지정하여 그 포트를 사용하는 프로세스 정보만을 확인할 수 있습니다.
해당 명령어를 통해 8080을 사용중인 프로세스 ID를 확인합니다.PID를 확인했으면 프로세스를 종료해야합니다.
2. 프로세스 종료시키기
kill 프로세스ID
kill 명령어는 UNIX 또는 Linux 시스템에서 프로세스를 종료하기 위해 사용됩니다. 이 명령어는 다양한 종류의 시그널을 사용할 수 있습니다.
kill 명령어에 대한 메뉴얼을 보면 사용할 수 있는 종류의 시그널이 나옵니다.
일반적으로 `-9` 옵션을 사용하는 것을 자주 보셨을 겁니다.
2-1) `9` KILL 시그널 주의사항
이 시그널은 프로세스에게 선택의 여지 없이 즉시 종료하도록 지시합니다. 프로세스는 SIGKILL을 무시하거나 잡아낼 수 없으며, 이로 인해 어떠한 정리 작업도 수행되지 않고 프로세스는 즉시 종료됩니다.
이는 프로세스가 어떠한 정리 작업도 수행하지 않고 강제로 종료되기 때문에 데이터 손실이나 시스템 불안정을 초래할 수 있습니다.
2-2) default 시그널 `15` TERM
메뉴얼을 보면 시그널의 default 옵션이 `15` TERM 인것을 확인할 수 있습니다. 해당 시그널은 프로세스에게 종료하라는 요청을 보내게 됩니다. 프로세스는 이 시그널을 받아들여 정상적으로 종료 처리를 할 수 있습니다. 예를 들어, 파일을 저장하거나 네트워크 연결을 닫는 등의 정리 작업을 수행할 수 있습니다.
차이점이 있다면 프로세스에 의해 요청이 무시될 수 있습니다.
가능하면 먼저 TERM을 사용하여 프로세스에게 종료를 요청하고, 그 후에도 종료되지 않을 경우 KILL을 사용하는 것이 좋습니다.
kill 명령어로 위에서 확인한 PID를 전달하고, 다시 8080 포트를 사용중인지 확인해 봅니다.
이후 다시 스프링 부트를 실행하여 tomcat이 기동되는지 확인합니다.
개발을 하다보면 default 옵션인 것들은 그럴만한 이유가 있다고 많이 느낍니다.kill 명령어 역시 이 중에 하나가 아닌가 싶습니다.
'오류 해결 > 환경' 카테고리의 다른 글
'setReadTimeout(int)' is deprecated and marked for removal 해결 (0) | 2023.09.11 |
---|---|
[WAS] JEUS 에서 Tomcat 으로 전환하기 (Intellij Tomcat 연동) (3) | 2023.01.20 |