1. PID란?

PID(Process Identifier)는 각 프로세스/스레드를 구분해주는 번호다.

— PID란?

2. 스프링부트에서 PID 생성하도록 하기

스프링부트는 실행되고 있는 애플리케이션의 pid 를 생성하도록 설정하는 것이 쉽다.

2.1. 설정

  • application.yml  spring.pid.file 속성을 정의

spring:
  pid:
    file: springboot-app.pid

spring.pid.file 속성을 정의하지 않으면 application.pid 라는 기본이름으로 생성한다.

  • @SpringBootApplication 이 붙은 Application 클래스 수정

    • 기존

public static void main(String[] args) {
    SpringApplication.run(Application.class, args);
}
  • 변경

public static void main(String[] args) {
    SpringApplication app = new SpringApplication(Application.class);
    app.addListeners(new ApplicationPidFileWriter());   // pid 를 작성하는 역할을 하는 클래스 선언
    app.run(args);
}

2.2. 확인

  1. 간단하게 실행

$ ./gradlew bootrun &

3. PID를 이용한 프로세스 죽이기

  1. 스프링부트 앱 실행

$ ./gradlew bootrun &
  1. 생성된 pid 파일 확인

$ ls
springboot-app.pid  bin  build  build.gradle  gradle  gradlew  gradlew.bat  src
$ cat application.pid
{pid}
  1. 프로세스 죽이기

kill -9 $(cat ./springboot-app.pid)
// 앱이 실행되면서 생성된

4. 정리

스프링부트 1.3.x 버전에 들어서면서 스프링부트리를 유닉스/리눅스 서비스로 등록할 수 있는 기능이 추가되었다. 여기서 사용하기 위해 추가된 기능이라고 보면 될듯 싶다. 애플리케이션이 실행되면 실행되는 프로세스ID를 발급받고 이 프로세스ID를 이용해서 애플리케이션을 죽일 수 있게 된다. 이는 컨테이너나 마이크로서비스 용 애플리케이션에 유용한 기술이라고 생각한다.


+ Recent posts