<< Android 어플 개발 기초 1 - Hello World 구현 | | 영화 - October SKY >>

JVM signal 처리 샘플

JVM signal을 처리하는 프로그램을 공유합니다.
Linux, HP-UX, Windows 등 운영체제마다 시그널을 처리하는 방식이 차이가 있습니다. 참고하시구요. 아래 프로그램은 윈도우 기반으로 짜여진 프로그램입니다.

1. OS별 처리 가능한 Signal
  • Unix/Linux  : SEGV, ILL, FPE, BUS, SYS, CPU, FSZ, ABRT, INT, TERM, HUP, USR1, QUIT, BREAK, TRAP, PIPE
  • Windows : SEGV, ILL, FPE, ABRT, INT, TERM, BREAK

2. Signal 핸들링하는 소스
 - 아래 프로그램은 TERM, INT, ABRT을 처리하는 예임
package client;

import java.util.HashMap;
import java.util.Map;

import sun.misc.Signal;
import sun.misc.SignalHandler;

public class DaemonSignalHandler implements SignalHandler
{
private static Map<Signal, SignalHandler> handlers
= new HashMap<Signal, SignalHandler>();

public void handle(Signal signal)
{
try {
System.out.println("received " + signal);
handlers.get(signal).handle(signal);
} catch (Exception e) {
e.printStackTrace();
}
}

public static void delegateHandler(final String signalName,
final SignalHandler signalHandler)
{
Signal signal = null;
SignalHandler oldhandler = null;
try {
signal = new Signal(signalName);
oldhandler = Signal.handle(signal, signalHandler);
} catch (Exception e) {
e.printStackTrace();
} finally {
handlers.put(signal, oldhandler);
}
}

public static void main(String[] args)
{
final int LONG_TIME = 50000;
try {
SignalHandler example = new DaemonSignalHandler();
delegateHandler("TERM", example);
delegateHandler("INT", example);
delegateHandler("ABRT", example);
Thread.sleep(LONG_TIME);
} catch (InterruptedException e) {
e.printStackTrace();
}
}
}

3. 실행 결과
 - 아래프로그램을 실행한 다음 Ctr-C 누름, SIGINT signal이 호출됨.
java -cp . client.DaemonSignalHandler
received SIGINT
태그 :



코멘트 달기 Send a TrackBack