티스토리 뷰

IntelliJ로 개발을 하다 보면 업데이트의 영향인지 갑자기 앱이 종료될 때가 있습니다.

(현재 저는 Mac OS는 Big Sur 11.4 버전을, IntelliJ는 2021.1.2 버전을 사용하고 있는데 아주 환장의 콜라보 상태입니다)

로컬에서 스프링 부트 애플리케이션을 개발하면서 별 다른 설정 없이 기동시켰다면 8080 포트로 앱이 실행되었을 거고 갑자기 앱이 종료되면 이 프로세스까지 같이 종료되지 않기 때문에, 다시 앱을 켜고 스프링 부트 앱을 실행시키면

Web server failed to start. Port 8080 was already in use.

이런 에러 로그를 마주하게 됩니다.

이럴 땐 터미널 내에서 아주 간단하게 해당 포트를 물고있는 프로세스를 종료할 수 있습니다.

jaime > lsof -n -i4TCP:8080
COMMAND   PID     USER   FD   TYPE             DEVICE SIZE/OFF NODE NAME
java    55828 a1101243   87u  IPv6 0xf4af32371e8a04bf      0t0  TCP *:http-alt (LISTEN)
jaime > kill -9 55828

lsof 명령으로 포트를 사용중인 PID를 찾고 해당 kill 명령어로 프로세스를 종료하는 것으로 다른 여러 가지 방법들이 있지만 이 방법이 가장 간단하고 빠른 거 같네요.

 


이렇게 끝내우면 아쉬우니 쉘 스크립트로 작성을 해봅시다.

/usr/local/bin 디렉터리로 이동해 파일을 생성합니다.

전 stop process with port의 약자인 spwp로 생성하였습니다.

 jaime ~ > cd /usr/local/bin
 jaime /usr/local/bin > vi spwp

vi로 열어 아래 스크립트를 입력합니다.

#!/bin/bash
touch temp.text
lsof -n -i4TCP:$1 | awk '{print $2}' > temp.text
pidToStop=`(sed '2q;d' temp.text)`
> temp.text
if [[ -n $pidToStop ]]
then
kill -9 $pidToStop
echo "process with $1 port is stopped"
else
echo "no process running on $1 port"
fi
rm temp.text

저장 후 종료한 뒤 외부에서 접근 가능하게 권한을 바꿔줍니다.

jaime usr/local/app > chmod 755 spwp

이제 어느 위치에서든 아래 명령어를 통해 포트를 사용 중인 프로세스를 종료할 수 있습니다.

spwp <PORT>

실행 화면

jaime ~ > spwp 8080
process with 8080 port is stopped
jaime ~ > spwp 8080
no process running on 8080 port
댓글