본문 바로가기

Java

[박혜웅] 프로세스 종료 처리 Runtime.addShutdownHook()


프로세스가 정상 또는 비정상 종료(Ctrl+C)될 때, 자동적으로 실행되는 스레드를 등록할 수 있다.
Runtime 클래스의 public void addShutdownHook(Thread hook) 또는 ublic boolean removeShutdownHook(Thread hook) 를 이용하여 등록 또는 제거할 수 있다.

위 참고링크에서는 윈도우의 작업관리자에서 강제 종료하여도 실행된다고 하였지만, Windows7에서 테스트한 결과 작업관리자에서 강제 종료할 때는 shutdown hook이 실행되지 않는 것을 확인했다.

아래는 간단한 예제이다.


package com.bagesoft.test.runtime;

public class ShutdownHookTest {

	public ShutdownHookTest() {
		Runtime.getRuntime().addShutdownHook(new ShutdownHookThread());
	}

	public static void main(String[] args) throws InterruptedException {
		new ShutdownHookTest();
		Thread.sleep(10 * 1000);
	}

	public class ShutdownHookThread extends Thread {

		@Override
		public void run() {
			System.out.println("ShutdownHookThread 실행");
		}
	}
}