Java 에서 시그널 처리하기(Windows)

Windows 환경에서는 제약사항이 있다.
import sun.misc.Signal;
import sun.misc.SignalHandler;


public class SignalHandlerImpl {

	public static void main(String[] args) throws InterruptedException {
		
		System.out.println("start");
		
		SignalHandler signalHandler = new SignalHandler() {			
			@Override
			public void handle(Signal signal) {
				System.out.println("signal.name : " + signal.getName() 
					+ ", signal.number : " + signal.getNumber());
			}
		};
		Signal.handle(new Signal("INT"), signalHandler); //Ctrl-C
		Signal.handle(new Signal("TERM"), signalHandler);		
		Signal.raise(new Signal("TERM"));
		
		Thread.sleep(1000 * 60);
		System.out.println("end");
		
	}
}

> java SignalHandlerImpl
start
signal.name : TERM, signal.number : 15 //Signal.raise() 로 발생시킴.
Ctrl - C
signal.name : INT, signal.number : 2

end

- TERM, ABRT, ILL, SEGV 는 Windows 운영체제에서 발생되지 않는다.

- BREAK, FPE 도 사용할 수 없다.
Signal already used by VM: SIGBREAK

- QUIT 도 사용할 수 없다.
Unknown signal: QUIT

- MSDN signal