java signal handler_【java】Singal和SingalHandler用法 | 学步园

import sun.misc.Signal;

import sun.misc.SignalHandler;

public class SignalHandlerExample implements SignalHandler {

private SignalHandler oldHandler;

public static SignalHandler install(String signalName) {

Signal diagSignal = new Signal(signalName);

SignalHandlerExample instance = new SignalHandlerExample();

instance.oldHandler = Signal.handle(diagSignal, instance);

return instance;

}

public void handle(Signal signal) {

System.out.println("Signal handler called for signal "

+ signal);

try {

signalAction(signal);

// Chain back to previous handler, if one exists

if (oldHandler != SIG_DFL && oldHandler != SIG_IGN) {

oldHandler.handle(signal);

}

} catch (Exception e) {

System.out.println("handle|Signal handler

failed, reason " + e.getMessage());

e.printStackTrace();

}

}

public void signalAction(Signal signal) {

System.out.println("Handling " + signal.getName());

System.out.println("Just sleep for 5 seconds.");

try {

Thread.sleep(5000);

} catch (InterruptedException e) {

System.out.println("Interrupted: "

+ e.getMessage());

}

}

public static void main(String[] args) {

SignalHandlerExample.install("TERM");

SignalHandlerExample.install("INT");

SignalHandlerExample.install("ABRT");

System.out.println("Signal handling example.");

try {

Thread.sleep(50000);

} catch (InterruptedException e) {

System.out.println("Interrupted: " + e.getMessage());

}

}

}

This program handles the TERM, INT, and ABRT signals. When it starts up, it will justsleep. During this time, if you press Ctr-C, the INT signal is triggered and signalAction is called.

Here is the sample output.

C:\>java -cp . SignalHandlerExample

Signal handling example.

Signal handler called for signal SIGINT

Handling INT

Just sleep for 5 seconds.

你可能感兴趣的:(java,signal,handler)