Some sun.misc internal APIs are deprectaed in JDK 9 and will be encapsulated or removed in a future release.
static void addSigIntHandler() { sun.misc.Signal.handle(new sun.misc.Signal("INT"), sig -> { logger.info("Got " + sig.getName() + " signal"); }); } }
public void handle(Signal signal) { LOG.info("Receive singal " + signal.getName() + " " + signal.getNumber()); Runnable runner = signalHandlers.get(signal.getNumber()); try { if (runner == null) { LOG.info("Skip JStorm register handler of signal: {}", signal.getName()); } else { LOG.info("Begin to handle signal of {}", signal.getName()); runner.run(); LOG.info("Successfully handle signal of {}", signal.getName()); } } catch (Throwable e) { LOG.error("Failed to handle signal of " + signal.getName() + ":" + e.getCause(), e); } try { SignalHandler oldHandler = oldSignalHandlers.get(signal.getNumber()); if (oldHandler != null) { LOG.info("Begin to run the old singleHandler"); oldHandler.handle(signal); // Force to sleep one second to avoid competition JStormUtils.sleepMs(1000); LOG.info("Successfully run the old singleHandler"); } } catch (Throwable e) { LOG.error("Failed to run old SignalHandler of signal: " + signal.getName() + ":" + e.getCause(), e); } } }
public static String preprocessQuery(Optional<String> catalog, Optional<String> schema, String query, List<String> preprocessorCommand, Duration timeout) throws QueryPreprocessorException { Thread clientThread = Thread.currentThread(); SignalHandler oldHandler = Signal.handle(SIGINT, signal -> clientThread.interrupt()); try { if (REAL_TERMINAL) { System.out.print(PREPROCESSING_QUERY_MESSAGE); System.out.flush(); } return preprocessQueryInternal(catalog, schema, query, preprocessorCommand, timeout); } finally { if (REAL_TERMINAL) { System.out.print("\r" + Strings.repeat(" ", PREPROCESSING_QUERY_MESSAGE.length()) + "\r"); System.out.flush(); } Signal.handle(SIGINT, oldHandler); Thread.interrupted(); // clear interrupt status } }
public class Aaarggh { public static void main(String[] args) throws Exception { Signal.handle(new Signal("INT"), new SignalHandler () { public void handle(Signal sig) { System.out.println( "Aaarggh, a user is trying to interrupt me!!"); System.out.println( "(throw garlic at user, say `shoo, go away')"); } }); for(int i=0; i<100; i++) { Thread.sleep(1000); System.out.print('.'); } } }
static void kill(int pid, boolean graceful) { if (System.getProperty("os.name").startsWith("Windows")) { List<String> args = ImmutableList.of("taskkill", "/f", "/pid", Integer.toString(pid)); try { new ProcessBuilder(args) .redirectInput(Redirect.from(NULL_FILE)) .redirectOutput(Redirect.INHERIT) .redirectError(Redirect.INHERIT) .start() .waitFor(); } catch (IOException | InterruptedException ignored) { } } else { int signal = new Signal(graceful ? "TERM" : "KILL").getNumber(); getPosix().kill(pid, signal); } }
@Override @IgnoreJRERequirement public void handle(Signal sig) { if (interceptor.handle(sig.getName()) && (oldHandler != null)) { oldHandler.handle(sig); } } }
@SuppressWarnings("restriction") @Override public void handle(Signal arg0) { if (arg0.getNumber() == predicate.IPC_SIG) { getPythonResult = true; } }
while (it.hasNext()){ Signal sig = (Signal)it.next(); System.out.println(sig.getName()); System.out.println(sig.getOccurance()); // do the same with source or whatever property }
public boolean renderOutput(PrintStream out, OutputFormat outputFormat, boolean interactive) { Thread clientThread = Thread.currentThread(); SignalHandler oldHandler = Signal.handle(SIGINT, signal -> { if (ignoreUserInterrupt.get() || client.isClientAborted()) { return; } client.close(); clientThread.interrupt(); }); try { return renderQueryOutput(out, outputFormat, interactive); } finally { Signal.handle(SIGINT, oldHandler); Thread.interrupted(); // clear interrupt status } }
SignalHandler handler = new SignalHandler () { public void handle(Signal sig) { ... // handle SIGINT } }; Signal.handle(new Signal("INT"), handler);
@Override public void handle(final sun.misc.Signal sig) { notifyListeners(new SignalEvent(sig, Signal.valueOfName(sig.getName()))); try { handleDefault(sig, Gfsh.getConsoleReader()); } catch (IOException e) { e.printStackTrace(); } }
SignalHandler sh = new SignalHandler() { public void handle(Signal sig) { Shutdown.exit(sig.getNumber() + 0200); } };
public static void registerSignalHandlers() { sun.misc.Signal.handle(new sun.misc.Signal("INT"), new sun.misc.SignalHandler() { @Override public void handle(final sun.misc.Signal sig) {} }); }
@Override public ExitCode run() { for (final sun.misc.Signal s : signalsToIntercept) { sun.misc.Signal.handle(s, signal -> handleTerminationSignal());
Signal sigInt = new Signal("INT"); // First register with SIG_DFL, just to get the old handler. final SignalHandler oldHandler = Signal.handle(sigInt, SignalHandler.SIG_DFL ); // Now register the actual handler Signal.handle(sigInt, new SignalHandler(){ @Override public void handle(Signal signal) { System.err.println("Sigint is being handled"); oldHandler.handle(signal); } });
protected void handleDefault(final sun.misc.Signal sig, final ConsoleReader consoleReader) throws IOException { final Signal signal = Signal.valueOfName(sig.getName()); switch (signal) { case SIGINT: if (consoleReader != null) { String prompt = consoleReader.getPrompt(); consoleReader.resetPromptLine(prompt, "", -1); } break; default: final SignalHandler handler = getOriginalSignalHandler(signal); if (handler != null) { handler.handle(sig); } } }