44 lines
1.6 KiB
Java
44 lines
1.6 KiB
Java
|
|
package Repository.Server;
|
||
|
|
import org.apache.commons.io.FileUtils;
|
||
|
|
import sun.misc.Signal;
|
||
|
|
import sun.misc.SignalHandler;
|
||
|
|
|
||
|
|
import java.io.File;
|
||
|
|
import java.util.Date;
|
||
|
|
public class DiagnosticSignalHandler implements SignalHandler {
|
||
|
|
private SignalHandler oldHandler;
|
||
|
|
private SignalHandler handler;
|
||
|
|
public DiagnosticSignalHandler() {
|
||
|
|
}
|
||
|
|
// Static method to install the signal handler
|
||
|
|
public static void install(String signalName, SignalHandler handler) {
|
||
|
|
Signal signal = new Signal(signalName);
|
||
|
|
DiagnosticSignalHandler diagnosticSignalHandler = new DiagnosticSignalHandler();
|
||
|
|
SignalHandler oldHandler = Signal.handle(signal, diagnosticSignalHandler);
|
||
|
|
diagnosticSignalHandler.setHandler(handler);
|
||
|
|
diagnosticSignalHandler.setOldHandler(oldHandler);
|
||
|
|
}
|
||
|
|
private void setOldHandler(SignalHandler oldHandler) {
|
||
|
|
this.oldHandler = oldHandler;
|
||
|
|
}
|
||
|
|
private void setHandler(SignalHandler handler) {
|
||
|
|
this.handler = handler;
|
||
|
|
}
|
||
|
|
// Signal handler method
|
||
|
|
// Signal handler method
|
||
|
|
@Override
|
||
|
|
public void handle(Signal sig) {
|
||
|
|
System.out.println("Diagnostic Signal handler called for signal " + sig);
|
||
|
|
try {
|
||
|
|
FileUtils.writeStringToFile(new File("got SIG" + sig.getName() + " " + new Date().toString().replace(':', '_')), "");
|
||
|
|
handler.handle(sig);
|
||
|
|
// Chain back to previous handler, if one exists
|
||
|
|
if (oldHandler != SIG_DFL && oldHandler != SIG_IGN) {
|
||
|
|
oldHandler.handle(sig);
|
||
|
|
}
|
||
|
|
} catch (Exception e) {
|
||
|
|
System.out.println("Signal handler failed, reason " + e);
|
||
|
|
}
|
||
|
|
}
|
||
|
|
}
|